看板 C_and_CPP 關於我們 聯絡資訊
問題(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