为什么下面的(公认的)指针操作会导致以下错误:*** 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);
最佳答案
分配给intPointer2
的值是指向intArray
中第一个元素的指针。此数组是在堆栈上分配的,因此尝试free
时它是undefined behavior。
您只能使用free
/ malloc
/ realloc
返回的calloc
内存。该数组中的第一个(也是唯一一个)元素包含intPointer
所指向的值的副本(不是intPointer
的值的副本)这一事实无关紧要。
仅调用free(intPointer)
将起作用。