[問題] 請問有關map的memory free

看板EE_DSnP作者 (Neil)時間14年前 (2009/12/22 08:32), 編輯推噓4(4015)
留言19則, 4人參與, 最新討論串1/1
其實是在作業六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

12/22 08:35, , 1F
補充一下 出問題的Point是指到Heap
12/22 08:35, 1F

12/22 08:35, , 2F
Pointer
12/22 08:35, 2F

12/22 08:36, , 3F
而且pair裡面的CirGate*指到的物件有清沒清都沒差
12/22 08:36, 3F

12/22 14:29, , 4F
真心的建議將 debugger 拿出來用... ddd 太慢可以試試 gdb
12/22 14:29, 4F

12/22 14:30, , 5F
他會告訴你 crash 時變數的值, 這些 info 應該可以比較容易
12/22 14:30, 5F

12/22 14:31, , 6F
幫你 debug 或是讓我們了解問題
12/22 14:31, 6F

12/22 19:51, , 7F
看起來像是double free;很有可能gdb一掛上去就沒事了....
12/22 19:51, 7F

12/22 20:49, , 8F
Double free 應該會顯示 double free error 吧?
12/22 20:49, 8F

12/22 20:50, , 9F
另一個方法就是將 code comment out 掉一些,divide and
12/22 20:50, 9F

12/22 20:50, , 10F
conquer to see what's going on...
12/22 20:50, 10F

12/22 22:38, , 11F
目前發現的結果:第一個輸入的檔案裡面有()[]時一定不
12/22 22:38, 11F

12/22 22:39, , 12F
能replace,但是可以正常cirprint,但是如果第一個輸入
12/22 22:39, 12F

12/22 22:40, , 13F
的檔案沒有上述字元的話,後面輸入的檔案有括弧就可以
12/22 22:40, 13F

12/22 22:41, , 14F
正常replace了= ='',然後是crash在map裡面的string呼
12/22 22:41, 14F

12/22 22:42, , 15F
叫destructer的時候,所以可能是string裡面存入某些字
12/22 22:42, 15F

12/22 22:43, , 16F
元的時候不能destruct嗎= = 完全不知道怎麼改.....
12/22 22:43, 16F

12/22 22:44, , 17F
可以請助教測試的時候第一個檔案不要放有括弧的嗎XDDD
12/22 22:44, 17F

12/22 23:54, , 18F
哈哈...請加油...OR...明天來找我吧:)
12/22 23:54, 18F

12/23 01:52, , 19F
結果在解決其他問題的時候這個問題就解決了囧 神奇
12/23 01:52, 19F
文章代碼(AID): #1BC1EGdE (EE_DSnP)