C中结构的深拷贝

Deep copy of struct in C

我有以下结构,需要将状态深度复制到 newState 中。

typedef struct statestruct{
    int instrMem[100];
    IDTType ID;
    int cycles;
} stateType;

typedef struct ID{
    int val;
} IDType;

假设状态已经初始化,为什么下面的代码不起作用?看起来它只是在做一个浅拷贝,我不能在不改变状态的情况下改变 newState 里面的 val。

newState = (stateType*)malloc(sizeof(stateType));
newState = state;
memcpy(&(newState->ID), &(state->ID), sizeof(IDType));

您正在为指针保留 space:

newState = (stateType*)malloc(sizeof(stateType)); /* Don't cast malloc */

但在下一行中,您覆盖了 malloc 返回的地址(内存泄漏):

newState = state;

如果要复制wherestate点的内容,只需使用:

newState = malloc(sizeof(stateType));
*newState = *state; /* Dereference to access the contents */

这一行没有意义:

memcpy(&(newState->ID), &(state->ID), sizeof(IDType));

因为当您使用 =

分配时,这个成员 (ID) 已经被复制