作者ForWin (就是要贏)
看板C_and_CPP
標題[問題] free記憶體後的問題
時間Tue Sep 25 13:07:08 2012
問題(Question):
小弟原本的想法是
malloc了一個arr1陣列
之後realloc了一個arr2陣列
arr2的size是arr1的兩倍
然後把arr1給free
預期的正確結果(Expected Output):
小弟預期free(arr1)之後,arr1和arr2因為找不到位址了
所以不管arr1[i]或是arr2[i]應該都是找不到值的 (0<i<2*size)
錯誤結果(Wrong Output):
結果跑出來
在arr1[0]及arr2[0]跑的值的確是已經被free掉了
可是詭異的是arr1[1]、arr1[2]、arr1[3].....的值都還讀得出來
既然都已經找不到開頭了
為什麼後面的值還找的到呢??
還請各位高手不吝指教
程式碼(Code):(請善用置底文網頁, 記得排版)
http://ideone.com/F5orA
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 111.184.174.105
→ Minilogo:realloc不會free掉arr1 09/25 13:11
推 littleshan:1.你不該free arr1,這樣是double free 09/25 13:15
→ littleshan:2. 這是未定義行為,任何結果都有可能,包括讀到值 09/25 13:16
推 stupid0319:像是馬英久把阿扁Free掉後,阿扁會就死掉嗎 09/25 13:16
→ ForWin:我知道realloc不會free掉arr1,所以我有另外free(arr1) 09/25 13:19
→ ForWin:對~我預期也是arr1跟arr2都找不到 09/25 13:20
→ ForWin:所以L大的意思是這是非合理行為,無法解釋的結果嗎?? 09/25 13:20
→ pnpncat:之前不是有租屋比喻嗎XD 09/25 18:14