這是我的代碼。我以爲我會在b2->x.pointer1->data
上獲得SegFault,因爲我沒有malloc
,b2->x.pointer1
。任何人都可以給我一些解釋嗎?在執行memcpy時,哪些值被複制到b2->x.pointer1
?還有關於struct *b2
特別是由memcpy
填寫的簿記,它是如何保存其成員的記錄的?我的動機是要知道如何b2->x.pointer1
堆積如山。使用memcpy填充結構
struct A
{
int data;
};
struct B
{
int data;
union X
{
struct A *pointer1;
//another
}x;
};
int main(int argc, char **argv)
{
struct B *b1 = (struct B*) malloc(sizeof(struct B));
b1->data = 100;
b1->x.pointer1 = (struct A*) malloc(sizeof(struct A));
b1->x.pointer1->data = 1;
struct B *b2 = (struct B*) malloc(sizeof(struct B));
//b2->x.pointer1 = (struct A*) malloc(sizeof(struct A));
memcpy(b2, b1, sizeof(struct B));
printf("%d", b2->x.pointer1->data);
return 0;
}
那該怎麼辦free(b1)
?它會釋放b1->x.pointer1
嗎?還是會在這裏出現內存泄漏?
[請參閱此討論,爲什麼不在C ..中使用malloc()和family的返回值](https:// stackoverflow。com/q/605845/2173917) –
@SouravGhosh感謝您的鏈接。但是我受到編譯器的限制。它會報告錯誤,如果我不從malloc()中返回。 – WhiteSword
....因爲您正在使用[tag:C++]編譯器來編譯[tag:c]代碼... – LPs