【发布时间】:2017-07-06 09:28:18
【问题描述】:
这是我的代码。我以为我会在b2->x.pointer1->data 上遇到SegFault,因为我没有malloc b2->x.pointer1。有人可以给我一些解释吗?执行 memcpy 时将哪些值复制到 b2->x.pointer1?还有关于struct *b2的簿记,特别是memcpy填写的,它是如何记录其成员的?我的所有动机都是想知道b2->x.pointer1 是如何在堆上获得它的内存的。
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 还是这里会有一些内存泄漏?
【问题讨论】:
-
@SouravGhosh 感谢您的链接。但我受我的编译器的限制。如果我不从 malloc() 转换返回值,它会报告错误。
-
...这很糟糕。
-
您是否包含正确的头文件?