看板 EE_DSnP 關於我們 聯絡資訊
其實是在作業六DEBUG的時候,出現了 *** glibc detected *** cirTest: free(): invalid pointer: 0x098d0ad0 *** 的錯誤,經過一串cout大法後發現原因出在map的memory free上面 以下是我用的格式 typedef std::pair<string,CirGate*> PairC; typedef std::map<string, PairC > CirMap; (In class CirMgr) CirMap _gate; (In some function in class CirMgr)_gate.clear();<----在這行發生錯誤 而且奇怪的是有時候這問題不會發生 舉個例子好了: (In cirTest) cirr testcases/basic/C17_r.cir -r <--一開始沒事 cirr testcases/basic/C17_r.cir -r <--第二次爆炸 但是如果是 (In cirTest) cirr testcases/basic/C17.cir -r <--先讀別的 cirr testcases/basic/C17_r.cir -r cirr testcases/basic/C17_r.cir -r cirr testcases/basic/C17_r.cir -r <--不管做幾次都沒問題 想請問一下要怎麼解決 = ='' 這其中一定有什麼誤會 謝謝回答!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.249.125
Neilhahaha:補充一下 出問題的Point是指到Heap 12/22 08:35
Neilhahaha: Pointer 12/22 08:35
Neilhahaha:而且pair裡面的CirGate*指到的物件有清沒清都沒差 12/22 08:36
ric2k1:真心的建議將 debugger 拿出來用... ddd 太慢可以試試 gdb 12/22 14:29
ric2k1:他會告訴你 crash 時變數的值, 這些 info 應該可以比較容易 12/22 14:30
ric2k1:幫你 debug 或是讓我們了解問題 12/22 14:31
timrau:看起來像是double free;很有可能gdb一掛上去就沒事了.... 12/22 19:51
ric2k1:Double free 應該會顯示 double free error 吧? 12/22 20:49
ric2k1:另一個方法就是將 code comment out 掉一些,divide and 12/22 20:50
ric2k1:conquer to see what's going on... 12/22 20:50
Neilhahaha:目前發現的結果:第一個輸入的檔案裡面有()[]時一定不 12/22 22:38
Neilhahaha:能replace,但是可以正常cirprint,但是如果第一個輸入 12/22 22:39
Neilhahaha:的檔案沒有上述字元的話,後面輸入的檔案有括弧就可以 12/22 22:40
Neilhahaha:正常replace了= ='',然後是crash在map裡面的string呼 12/22 22:41
Neilhahaha:叫destructer的時候,所以可能是string裡面存入某些字 12/22 22:42
Neilhahaha:元的時候不能destruct嗎= = 完全不知道怎麼改..... 12/22 22:43
Neilhahaha:可以請助教測試的時候第一個檔案不要放有括弧的嗎XDDD 12/22 22:44
chrisioriryo:哈哈...請加油...OR...明天來找我吧:) 12/22 23:54
Neilhahaha:結果在解決其他問題的時候這個問題就解決了囧 神奇 12/23 01:52