我有以下结构,需要将状态的深层副本复制到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));
答案 0 :(得分:2)
您正在为指针保留空间:
newState = (stateType*)malloc(sizeof(stateType)); /* Don't cast malloc */
但是在下一行中,你覆盖malloc
返回的地址(内存泄漏):
newState = state;
如果要复制state
点的内容,请使用:
newState = malloc(sizeof(stateType));
*newState = *state; /* Dereference to access the contents */
这条线没有意义:
memcpy(&(newState->ID), &(state->ID), sizeof(IDType));
因为当您使用ID
=
)已被复制