NetRoc's Blog

N-Tech

 

VC6 CRT库一BUG记录

VC6 CRT库一BUG记录

帮一哥们调试了一Dump文件。来源是一服务器端程序,连续运行10多天后出现崩溃。看dump崩溃在MSVCRTD!malloc_dbg内,写了个VC6程序试了一下,崩溃的具体位置如下:

_heap_alloc_dbg(unsigned int 100, int 1, const char * 0x00000000, int 0) line 334

_nh_malloc_dbg(unsigned int 100, int 0, int 1, const char * 0x00000000, int 0) line 248 + 21 bytes

malloc(unsigned int 100) line 130 + 21 bytes

代码如下:

lRequest = _lRequestCurr;

 

/* break into debugger at specific memory allocation */

if (lRequest == _crtBreakAlloc)

_CrtDbgBreak();

因为lRequest和_crtBreakAlloc相等,所以中断在了调试断点处。_lRequestCurr是CRT调试堆用于记录堆内存被申请的次数,每次申请的时候加1,时间长了之后这个变量溢出变成-1,而_crtBreakAlloc默认的值就是-1,因此这里CRT认为被下了用户断点,主动中断。

看来Debug版用于生产环境还是有风险的。合理的还是用Release+调试信息比较好,呵呵。

posted on 2010-07-19 21:20 NetRoc 阅读(902) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。

导航

统计

常用链接

留言簿(7)

随笔档案(99)

文章分类(35)

文章档案(32)

Friends

Mirror

搜索

最新评论

阅读排行榜

评论排行榜