作者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