为什么下面的(公认的)指针操作会导致以下错误:

*** 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)将起作用。

10-04 22:00