为什么这个指针操作序列会导致错误?

时间:2016-03-10 21:04:11

标签: c pointers free

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

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

2 个答案:

答案 0 :(得分:8)

分配给intPointer2的值是指向intArray中第一个元素的指针。此数组已在堆栈上分配,因此尝试free它是undefined behavior

您只能free / malloc / realloc返回的calloc内存。事实上,此数组中的第一个(也是唯一的)元素包含 intPointer 指向的值的副本(不是intPointer的值的副本)并不是# 39;无所谓。

仅调用free(intPointer)即可。

答案 1 :(得分:3)

您已将&intArray[0]传递给free,但您没有从malloc获取,因此行为未定义。