作者Neilhahaha (Neil)
看板EE_DSnP
標題[問題] 請問有關map的memory free
時間Tue Dec 22 08:32:13 2009
其實是在作業六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
1F:→ Neilhahaha:補充一下 出問題的Point是指到Heap 12/22 08:35
2F:→ Neilhahaha: Pointer 12/22 08:35
3F:→ Neilhahaha:而且pair裡面的CirGate*指到的物件有清沒清都沒差 12/22 08:36
4F:推 ric2k1:真心的建議將 debugger 拿出來用... ddd 太慢可以試試 gdb 12/22 14:29
5F:→ ric2k1:他會告訴你 crash 時變數的值, 這些 info 應該可以比較容易 12/22 14:30
6F:→ ric2k1:幫你 debug 或是讓我們了解問題 12/22 14:31
7F:推 timrau:看起來像是double free;很有可能gdb一掛上去就沒事了.... 12/22 19:51
8F:推 ric2k1:Double free 應該會顯示 double free error 吧? 12/22 20:49
9F:→ ric2k1:另一個方法就是將 code comment out 掉一些,divide and 12/22 20:50
10F:→ ric2k1:conquer to see what's going on... 12/22 20:50
11F:→ Neilhahaha:目前發現的結果:第一個輸入的檔案裡面有()[]時一定不 12/22 22:38
12F:→ Neilhahaha:能replace,但是可以正常cirprint,但是如果第一個輸入 12/22 22:39
13F:→ Neilhahaha:的檔案沒有上述字元的話,後面輸入的檔案有括弧就可以 12/22 22:40
14F:→ Neilhahaha:正常replace了= ='',然後是crash在map裡面的string呼 12/22 22:41
15F:→ Neilhahaha:叫destructer的時候,所以可能是string裡面存入某些字 12/22 22:42
16F:→ Neilhahaha:元的時候不能destruct嗎= = 完全不知道怎麼改..... 12/22 22:43
17F:→ Neilhahaha:可以請助教測試的時候第一個檔案不要放有括弧的嗎XDDD 12/22 22:44
18F:推 chrisioriryo:哈哈...請加油...OR...明天來找我吧:) 12/22 23:54
19F:→ Neilhahaha:結果在解決其他問題的時候這個問題就解決了囧 神奇 12/23 01:52