所以已经有很多关于通过分配或使用memcpy复制结构的问题。现在,我写了一个小PROGRAMM具有两种结构:memcpy结构与另一个结构不工作在C
typedef struct {
int b;
} myStruct2;
typedef struct {
int a;
myStruct2* sub_struct;
} myStruct;
所以现在我试图定义两个结构,然后用的memcpy对他们这样的(我分配内存后处理NULL指针,刚刚离开它出去更容易阅读):
myStruct* var_one = malloc(sizeof(myStruct));
var_one->sub_struct = malloc(sizeof(myStruct2));
var_one->a = 10;
var_one->sub_struct->b = 111;
myStruct* var_two = malloc(sizeof(myStruct));
var_two->sub_struct = malloc(sizeof(myStruct2));
var_two->a = 22;
var_two->sub_struct->b = 2222;
printf("%d und %d\n", var_two->a, var_two->sub_struct->b);
memcpy(var_two, var_one, sizeof(myStruct));
printf("%d und %d\n", var_two->a, var_two->sub_struct->b);
沙发一切正常,如预期。但是要知道,如果我做的:
free(var_one->sub_struct);
free(var_one);
printf("%d und %d\n", var_two->a, var_two->sub_struct->b);
第二个printf是给我的错误:
大小为4的无效读取;
有人可以解释我也许是为什么吗? var_two的子结构的内存已经分开分配,我认为memcpy只是复制一块内存?那么为什么要释放影响第二个子结构的第一个子结构呢?
'memcpy'不会执行深层复制。如果您不会遵循指针并复制对象,请编写自定义函数。 – StoryTeller