所以已經有很多關於通過分配或使用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