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