[問題] doulbe free or corruoption

看板C_and_CPP作者 (Kent)時間8年前 (2016/06/16 16:20), 8年前編輯推噓3(3024)
留言27則, 6人參與, 最新討論串1/1
請教一下各位大大,修改程式的時候發生 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

06/16 16:26, , 1F
for (exp1; exp2; exp3) { stat; }
06/16 16:26, 1F
※ 編輯: xanushan (61.56.12.194), 06/16/2016 16:31:35

06/16 16:31, , 2F
從這段 code 看不到 double free 除非有水晶球吧?
06/16 16:31, 2F

06/16 16:33, , 3F
還有為什麼會 free 一個不是指標型態的變數啊 QQ
06/16 16:33, 3F

06/16 16:33, , 4F
已更正. 打太快打錯…
06/16 16:33, 4F

06/16 16:35, , 5F
因為你在write data 迴圈條件用 j, 但裡面用 k ?
06/16 16:35, 5F

06/16 16:35, , 6F
---> float a; free(a); <---
06/16 16:35, 6F

06/16 16:35, , 7F
而且你 int j 和 int k 都沒給初值喔!
06/16 16:35, 7F
※ 編輯: xanushan (61.56.12.194), 06/16/2016 16:40:49

06/16 16:44, , 8F
抱歉讓大家傷眼了…已更正…所以不能重複free嗎…如果會
06/16 16:44, 8F

06/16 16:44, , 9F
重複malloc 的話
06/16 16:44, 9F

06/16 16:45, , 10F
新的網址如右:http://codepad.org/iFWO7Kt8
06/16 16:45, 10F

06/16 16:46, , 11F
編譯有過,但跑出double free ....
06/16 16:46, 11F

06/16 17:03, , 12F
你a,b,c還是沒初始化啊
06/16 17:03, 12F
※ 編輯: xanushan (61.56.12.194), 06/16/2016 17:07:28

06/16 17:09, , 13F
sor…更正了…都給NULL…結果一樣…
06/16 17:09, 13F

06/16 17:09, , 14F

06/16 17:17, , 15F
還是錯不在這 …因為我只有改if裡的code而己
06/16 17:17, 15F

06/16 17:20, , 16F
為什麼 free(b); 後卻設 a=NULL; 而不是設 b=NULL; ??
06/16 17:20, 16F
※ 編輯: xanushan (61.56.12.194), 06/16/2016 17:24:45

06/16 17:25, , 17F
打錯…改好了…QQ
06/16 17:25, 17F

06/16 17:26, , 18F

06/16 17:26, , 19F
錯誤結果一樣…
06/16 17:26, 19F

06/16 17:54, , 20F
剛剛發現把第二個ball[j].counter2換成其他變數
06/16 17:54, 20F

06/16 17:57, , 21F
就沒有錯誤了…有大大能解答嗎…(malloc)
06/16 17:57, 21F

06/16 17:59, , 22F
那就是你未貼出的部分, 存取越界把heap搞壞, 所以free()報錯.
06/16 17:59, 22F

06/16 17:59, , 23F
比方你ball的宣告長什麼樣,或是如何取得ball的空間.
06/16 17:59, 23F

06/16 18:04, , 24F
以及 a b c 的存取動作.
06/16 18:04, 24F

06/16 18:09, , 25F
沒看到錯不代表沒錯,可能只是剛好沒動到free()時,檢查的部分.
06/16 18:09, 25F

06/16 21:17, , 26F
可以考慮用valgrind之類的tool
06/16 21:17, 26F

06/18 05:23, , 27F
用tool 直接看哪裡free
06/18 05:23, 27F
文章代碼(AID): #1NOc53O_ (C_and_CPP)