为什么下面的(公认的深奥)指针操作会导致以下错误:
*** Error in /home/ubuntu/workspace/Project 3/Debug/Project 3': double free or corruption (out): 0x00007fffffffd7c0 ***
int *intPointer = malloc(sizeof(int));
*intPointer = 1;
int intArray[] = { *intPointer };
int *intPointer2 = &intArray[0];
free(intPointer2);
答案 0 :(得分:8)
分配给intPointer2
的值是指向intArray
中第一个元素的指针。此数组已在堆栈上分配,因此尝试free
它是undefined behavior。
您只能free
/ malloc
/ realloc
返回的calloc
内存。事实上,此数组中的第一个(也是唯一的)元素包含 intPointer
指向的值的副本(不是intPointer
的值的副本)并不是# 39;无所谓。
仅调用free(intPointer)
即可。
答案 1 :(得分:3)
您已将&intArray[0]
传递给free
,但您没有从malloc
获取,因此行为未定义。