奇奇的空间

奇奇的空间
posts - 5, comments - 13, trackbacks - 0, articles - 23

iocore 连续运行21天后出错问题的分析

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


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理