为什么这一系列指针操作会导致错误?

Why does this sequence of pointer operations cause an error?

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

*** 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

您只能 freemalloc/realloc/calloc 返回的内存。该数组中的第一个(也是唯一一个)元素包含 intPointer 指向的值的副本(不是 intPointer 的值的副本) 没关系。

只有调用 free(intPointer) 才有效。

您正在将 &intArray[0] 传递给 free,但您并未从 malloc 获取它,因此行为未定义。