看板 C_and_CPP 關於我們 聯絡資訊
請教一下各位大大,修改程式的時候發生 doulbe free or corruoption的問題,該如何 解決 環境rat hat 4 / gcc 34 ##手機發文排版不佳,請見諒。 程式碼簡化,短網址如下: http://codepad.org/STcOU5QB -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.56.12.194 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1466065219.A.63F.html ※ 編輯: xanushan (61.56.12.194), 06/16/2016 16:23:33
Hazukashiine: for (exp1; exp2; exp3) { stat; }06/16 16:26
※ 編輯: xanushan (61.56.12.194), 06/16/2016 16:31:35
Hazukashiine: 從這段 code 看不到 double free 除非有水晶球吧?06/16 16:31
Hazukashiine: 還有為什麼會 free 一個不是指標型態的變數啊 QQ06/16 16:33
xanushan: 已更正. 打太快打錯…06/16 16:33
bibo9901: 因為你在write data 迴圈條件用 j, 但裡面用 k ?06/16 16:35
Hazukashiine: ---> float a; free(a); <---06/16 16:35
bibo9901: 而且你 int j 和 int k 都沒給初值喔!06/16 16:35
※ 編輯: xanushan (61.56.12.194), 06/16/2016 16:40:49
xanushan: 抱歉讓大家傷眼了…已更正…所以不能重複free嗎…如果會06/16 16:44
xanushan: 重複malloc 的話06/16 16:44
xanushan: 新的網址如右:http://codepad.org/iFWO7Kt806/16 16:45
xanushan: 編譯有過,但跑出double free ....06/16 16:46
bibo9901: 你a,b,c還是沒初始化啊06/16 17:03
※ 編輯: xanushan (61.56.12.194), 06/16/2016 17:07:28
xanushan: sor…更正了…都給NULL…結果一樣…06/16 17:09
xanushan: http://codepad.org/az35g2cV06/16 17:09
xanushan: 還是錯不在這 …因為我只有改if裡的code而己06/16 17:17
yvb: 為什麼 free(b); 後卻設 a=NULL; 而不是設 b=NULL; ??06/16 17:20
※ 編輯: xanushan (61.56.12.194), 06/16/2016 17:24:45
xanushan: 打錯…改好了…QQ 06/16 17:25
xanushan: http://codepad.org/STcOU5QB 06/16 17:26
xanushan: 錯誤結果一樣… 06/16 17:26
xanushan: 剛剛發現把第二個ball[j].counter2換成其他變數 06/16 17:54
xanushan: 就沒有錯誤了…有大大能解答嗎…(malloc) 06/16 17:57
yvb: 那就是你未貼出的部分, 存取越界把heap搞壞, 所以free()報錯. 06/16 17:59
yvb: 比方你ball的宣告長什麼樣,或是如何取得ball的空間. 06/16 17:59
yvb: 以及 a b c 的存取動作. 06/16 18:04
yvb: 沒看到錯不代表沒錯,可能只是剛好沒動到free()時,檢查的部分. 06/16 18:09
phishingphi: 可以考慮用valgrind之類的tool 06/16 21:17
steve1012: 用tool 直接看哪裡free 06/18 05:23