2016-03-10 130 views
-2

为什么以下原因以下错误(诚然深奥)指针操作:为什么这个指针操作序列会导致错误?

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

回答

8

分配给intPointer2的值是一个指向intArray第一个元素。这个数组被分配在堆栈上,所以试图free它是undefined behavior

您只能freemalloc/realloc/calloc返回的内存。这个数组中的第一个(也是唯一)元素包含(不是intPointer的值的副本)指向的值的副本的事实并不重要。

只有调用free(intPointer)才能工作。

3

你正在通过&intArray[0]free,但是你没有从malloc得到它,所以行为是未定义的。

+0

但我讲故事一个整数,我在数组中做malloc? – Adam

+0

您正在存储malloc'd int的副本。该副本不是malloc'd。 – emlai

+0

如果我将'intPointer'存储在数组中,然后设置'intPointer2 = intArray [0]''''intPointer2'上的空闲函数是否工作? – Adam

相关问题