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
) 已经被复制
我有以下结构,需要将状态深度复制到 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
) 已经被复制