C语言中结构的深层副本

时间:2017-11-18 21:35:29

标签: c struct copy memcpy

我有以下结构,需要将状态的深层副本复制到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));

1 个答案:

答案 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

分配时,此成员(=)已被复制