Posted on 2006-11-17 13:08
奇奇 阅读(834)
评论(0) 编辑 收藏 引用 所属分类:
VC++
iocore
连续运行
21
天后程序出错,地址为
0X10212AD0
,报错为
“unknown software exception (0X80000003),
位置为
0X10212AD0”
,经过分析为
new
调用时出错,
跟踪程序到
_heap_alloc_dbg
void * __cdecl _heap_alloc_dbg(
size_t nSize,
int nBlockUse,
const char * szFileName,
int nLine
)
{
long lRequest;
size_t blockSize;
int fIgnore = FALSE;
_CrtMemBlockHeader * pHead;
/* verify heap before allocation */
if (_crtDbgFlag & _CRTDBG_CHECK_ALWAYS_DF)
_ASSERTE(_CrtCheckMemory());
lRequest = _lRequestCurr;
/* break into debugger at specific memory allocation */
if (lRequest == _crtBreakAlloc)
_CrtDbgBreak();
// here is the place were the app stops
// ... function continuous
_crtBreakAlloc
为
-1
。
lRequest
为
long
型,每
new
一次,
_lRequestCurr
每调用一次
new
,自动加
1
,当
2147483647
再加
1
变成
-2147483648
,一直累加到
-1
,然后调用
_CrtDbgBreak()
,出错。看似是这个原因,为了进一步确认,编写测试程序
class AA
{
char aa1[10];
char aa2[12];
};
int main(int argc, char* argv[])
{
AA *pp;
while(1)
{
pp=new AA;
delete pp;
}
}
几个小时后复现了此现象。
网上查找0X10212AD0 有如下线索:
http://www.experts-exchange.com/Programming/Programming_Languages/MFC/Q_21088390.html