int main()
{
int* Pointer;
Pointer = (int*)malloc(sizeof(int));
*Pointer = 33;
int * Pointer2 = Pointer;
printf("%d\n", *Pointer);
free(Pointer);
free(Pointer2);
return 0;
}
输出是: 33 没有错误或警告。 我在两个指向相同堆地址的指针上发了誓。 我知道它的目标是释放他们两个,只需要一个免费的需要在这里使用(一个malloc一个免费),但如果我会这样做(两个都释放),它将是Undefined?或者它可以这样做它只是不会做任何事情从不同的指针(指针和指针2)释放相同的堆区域?
答案 0 :(得分:2)
根据C11 standard draft 7.22.3.3p2
free
函数会导致ptr
指向的空间 取消分配,即可用于进一步分配。如果是ptr 一个null
指针,不会发生任何操作。否则,如果参数没有 匹配之前由内存管理函数返回的指针,或 如果通过调用free
或realloc
取消分配空格, 行为未定义。
(重点是我的......)