作者dostaevsky (軒)
看板EE_DSnP
標題CmdParser::parseCmd Assertion failed
時間Sun May 10 14:43:39 2009
如果mtn一些Size >= 256的array (mtn 1 -a 258)
再用mtd 將記憶體回收 (-i or -r)
接著無論輸入什麼command,在CmdParsr::parseCmd都會產生Assertion failed
例如:
mtest> mtn 1 -a 256
Calling allocArr...(3592)
Calling MemMgr::getMem...(3592)
Memory acquired... 0x1c3c860
mtest> mtd -i 0 -a
Calling freeArr...(0x1c3c860)
>> Array size = 256
Recycling 0x1c3c860 to _recycleList[256]
mtest> xxxx
memTest.debug: cmdParser.cpp:150: CmdExec* CmdParser::parseCmd(std::string&):
Assertion `str[0] != 0 && str[0] != ' '' failed.
已經終止
但使用gdb又難以抓到我想要看的_history[_historySize - 1]
會出現 No symbol "_historySize" in current context.
不太清楚應該break在哪個階層才能找到bug...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.39.169
1F:→ dostaevsky:而且size小的array不會有錯 05/10 14:45
2F:推 ric2k1:如果這樣的現象在不同的人的 memMgr.h 的 implemenations 05/10 15:56
3F:→ ric2k1:都會發生, 那就可能是 cmd 的問題, 否則, 就很可能是你的 05/10 15:58
4F:→ ric2k1:code 造成一些 memory 的 bug, 最常見的就是 illegal 05/10 15:59
5F:→ ric2k1:memory access, 比方說你的 array index 太大寫到別人的 05/10 15:59
6F:→ ric2k1:後院去了, 或者是你試著去 access/write 一個已經被 freed 05/10 16:01
7F:→ ric2k1:的 pointer variable. 總而言之, 就是一些 illegal 的 mem 05/10 16:02
8F:→ ric2k1:access 造成一些不屬於你的 code 的部分的記憶體被 05/10 16:02
9F:→ ric2k1:corrupted 掉了... 怎麼 debug? 不容易, 可以試試 05/10 16:03
10F:→ ric2k1:"comment out" 大法, 把一些 code comment out 掉, 試著找 05/10 16:04
11F:→ ric2k1:到哪一段 code 在作怪先... 05/10 16:05