Debug程序死在了lRequest == _crtBreakAlloc,之调用New的次数过多
  包拯 发表于 2011-08-23 22:54  分类:技术资料  5,096 次阅读  3条评论

Debug版的程序运行了好久,忽然死掉了,检查尸体的时候发现死在如下代码中的最后一个if那里:         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(); 这个时候_lRequestCurr的值刚好是-1,也就是_crtBreakAlloc,所以程序进入断点,原因是_lRequestCurr是一个long类型的数据,每次new的时候就会自动加1,如果达到long类型的最大正范围2147483647 ,就会变成-2147483648,然后_lRequestCurr这个继续自动加1,经过一段时间最终就会到达-1,从而进入断点,原因找到了,下一步考虑如何解决之,理论上,凡是Debug的程序,无论是显式的或者隐式的调用了new,迟早会出现这种错误…… 这个问题如何解决呢?请看下面这篇博客:

http://www.youduoshao.com/2011-11-06/20111106435.html

本文固定链接: http://www.youduoshao.com/2011-08-23/20110823222.html

Debug程序死在了lRequest == _crtBreakAlloc,之调用New的次数过多:目前有3 条评论

填写您的称呼和邮箱即可发布评论

快捷键:Ctrl+Enter