2011-01-20 48 views
3

可能重複:
Does the pointer passed to free() have to point to beginning of the memory block, or can it point to the interior?我可以通過引用偏移指針來釋放()嗎?

我分配使用malloc()堆一些內存。我添加的偏移指針,並返回到調用函數return ptr+(sizeof(char)*4)),在這個返回值存儲在ptrReturned,例如。

最大的問題是,當我從sizeof(char)*4偏移分配塊的開始位置時,整個塊將被釋放還是將其從偏移量釋放直到分配塊的末尾?我使用的編譯器是MSVC++ 2008。

如果分配的地址存儲在一個鏈表,並有指向先前的項目,那麼它應該擺脫在以前指針爲NULL高達到下一個指針爲NULL整個塊,對不對?

我試着調試和看的記憶,但我不能讓它覆蓋騰出塊空間。有沒有辦法可能顯式地嘗試和在堆中分配空間在一個已定義的地址,並可能得到一個異常嘗試分配已分配的內存?這樣我就可以知道,如果有的話,當然,沒有更簡單的答案。

我希望這個問題是清楚的,如果我錯過了一些資料,請讓我知道在評論中。謝謝。

+0

[Duplicate](http://stackoverflow.com/questions/4589033/does-the-pointer-passed-to-free-have-to-point-to-beginning-of-the-memory-block ) – Mehrdad 2011-01-20 08:17:23

+1

我們不會因爲他們是愚蠢而刪除問題。另外模仿並不是那麼糟糕。更多機會搜索者找到他們想要的東西。 – Will 2011-01-20 15:14:28

回答

8

必須在相同的指針值傳遞給free(),是由malloc()函數返回,或者你的程序有不確定的操作。你期望它可以釋放全部或部分分配的塊是沒有根據的。

2

,我發現,標準以下的報價:

否則,如果該參數不 匹配的指針早些時候 返回的釋放calloc,malloc或realloc 功能,或者如果空間已經 通過免費調用釋放或 realloc,行爲是未定義的。