Posted on 2006-11-17 13:08
奇奇 閱讀(846)
評論(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