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