簡體   English   中英

在一個結構上使用memcpy,而另一個結構在C中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM