【发布时间】:2017-06-14 09:16:25
【问题描述】:
我目前正在学习 C。我的讲师给出了一个使用 malloc 和 free 的坏例子,但对我来说这似乎没问题。这是代码:
int *p1,**p2;
p1 = malloc(sizeof(int));
*p1 = 7;
p2 = malloc(sizeof(int*));
*p2 = p1;
free(p1);
free(*p2);
我的讲师声称释放 p1 和 *p2 会导致“未定义的行为”,但我不明白为什么。
我知道双重释放内存中的同一区域是不好的,但 *p2 不会指向指向 7 所在位置的指针吗?我认为他的意思是免费(p1)和免费(**p2)是不好的。我说的对吗?
【问题讨论】:
-
您认为
*p2 = p1;是什么意思?事后有哪些要点? -
对我来说这意味着 p2 指向的东西得到 p1 的地址。我认为双指针让我感到困惑。
-
@toastedDeli 可能尝试使用 printf() 打印所有变量(
p1、p2、*p2等)的地址,然后看看你是否能理解。 -
free(*p2);==>free(p2);看看你把malloc的返回值赋值给了什么。 -
@kaylum 不,OP 已经做了
free(p1),但还需要free(p2),但不是free(*p2);
标签: c pointers memory-management malloc