gpt4 book ai didi

c - memcpy 给了我奇怪的结构结果

转载 作者:行者123 更新时间:2023-11-30 20:37:22 24 4
gpt4 key购买 nike

在一个项目中,我被要求使用 int32_t 创建一个 INT128 类型并用它们进行后缀计算。我使用通用堆栈来跟踪操作数。代码如下:

typedef struct int128
{
int32_t byteArray[4];
} INT128;


typedef struct node{
void *value;
struct node *bottom;

} NODE;

typedef struct stack{
int size;
size_t dataType;
NODE *top;
} STACK;

我使用 memcpy() 将 INT128 的值复制到堆栈并复制回来。当堆栈只有 char 变量时效果很好,但结果与 INT128 类型完全不同。 我对内存操作不太熟悉,所以可能有些东西我在这里没有看到。 谢谢!

编辑:抱歉,大家......我使用下面的函数从堆栈中推送和弹出数据:

void push(STACK *machine,void *pushed)
{
NODE *newNode = malloc(sizeof(NODE));
newNode->value = malloc(machine->dataType);
memcpy(newNode->value,pushed,sizeof(machine->dataType));

newNode->bottom = machine->top;
machine->top = newNode;
machine->size++;
}

void pop(STACK *machine, void *poppedValue)
{
if(machine->top == NULL)
{
printf("WARNING: empty stack!\n");
}
else
{
NODE *popped = machine->top;
memcpy(poppedValue,popped->value,machine->dataType);
machine->top = popped->bottom;

free(popped->value);
free(popped);

machine->size--;
}
}

我正在初始化堆栈,如下所示:

STACK *numStack = createStack(sizeof(INT128));

并正常使用push/pop功能。

最佳答案

这里有一个问题:

newNode->value = malloc(machine->dataType);
memcpy(newNode->value,pushed,sizeof(machine->dataType));

您分配machine->dataType字节,但随后复制sizeof machine->dataType字节。这些可能是不同的数量,要么导致缓冲区溢出,要么由于没有复制足够的字节而导致不良行为。

我猜您可能不想在第二行中使用 sizeof

关于c - memcpy 给了我奇怪的结构结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32800651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com