2016-03-10 158 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

相關問題