[英]memcpy over a structure with another structure not working in C
因此,關於通過分配或使用memcpy復制結構的問題已經很多。 現在,我編寫了一個具有兩個結構的小程序:
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);
Sofar一切正常,符合預期。 但是知道我是否這樣做:
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
您還將指針復制到了子結構。 如果再釋放原件,則已釋放所指向的內存(剛剛復制)。
所以var_two->sub_struct
現在指向內存var_one->sub_struct
點。 使用free(var_one->sub_struct)
您可以有效地釋放var_two->sub_struct
現在指向的對象。
順便說一句, var_two->sub_struct
指向的內存現在丟失了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.