我有以下结构,需要将状态的深拷贝复制到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));发布于 2017-11-18 21:55:25
您正在为指针预留空间:
newState = (stateType*)malloc(sizeof(stateType)); /* Don't cast malloc */但是在下一行中,您重写了malloc返回的地址(内存泄漏):
newState = state;如果要复制where state点的内容,只需使用:
newState = malloc(sizeof(stateType));
*newState = *state; /* Dereference to access the contents */这句话没有道理:
memcpy(&(newState->ID), &(state->ID), sizeof(IDType));因为当您使用ID分配时,此成员( = )已经被复制。
https://stackoverflow.com/questions/47371318
复制相似问题