首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vs2008运行库Debug版崩溃有关问题!

2012-09-23 
vs2008运行库Debug版崩溃问题!!!!!!!今天调试代码,发现一个崩溃问题,居然是VS的运行库上的。。。。。求解!贴下

vs2008运行库Debug版崩溃问题!!!!!!!
今天调试代码,发现一个崩溃问题,居然是VS的运行库上的。。。。。求解!
贴下大概源码:
tidtable.c文件中的_getptd_noexit函数有如下语句

C/C++ code
#ifdef _DEBUG        extern void * __cdecl _calloc_dbg_impl(size_t, size_t, int, const char *, int, int *);        if ((ptd = _calloc_dbg_impl(1, sizeof(struct _tiddata), _CRT_BLOCK, __FILE__, __LINE__, NULL)) != NULL) {#else  /* _DEBUG */        if ((ptd = _calloc_crt(1, sizeof(struct _tiddata))) != NULL) {#endif  /* _DEBUG */



 注意:_calloc_dbg_impl调用的最后一个参数传递了一个NULL指针。

而_calloc_dbg_impl函数会调用_nh_malloc_dbg_impl(nSize, _newmode, nBlockUse, szFileName, nLine, errno_tmp);
_nh_malloc_dbg_impl函数会调用_heap_alloc_dbg_impl(nSize, nBlockUse, szFileName, nLine, errno_tmp);
此时errno_tmp是一个空指针。
问题出现在_heap_alloc_dbg_impl函数中有如下一段代码:
C/C++ code
if (pHead == NULL){   [color=#FF0000] *errno_tmp = ENOMEM;[/color]    RTCCALLBACK(_RTC_FuncCheckSet_hook,(1));}



 根本没判断errno_tmp指针是否有效,就直接赋值,导致崩溃,无法完成单步调试,纠结啊!!!!
不知道大家有没有碰到过此问题,又是怎么解决的??????????
直接修改VS代码好像无效,不知道还需要做什么操作~~~~~

[解决办法]
肯定不是VS代码中的问题,你程序有问题。关键你程序最后调用的函数,内存问题。
[解决办法]
如果是修改代码之后出现的这个问题,最好把注意力放在新加的代码上
[解决办法]
别跟运行时库较劲了,检查你自己的代码吧,看一下此时的堆栈。
[解决办法]
问题不在那个NULL,而是前面错了,
从出错的位置来看,和线程的数据块(有些C/C++运行库函数需要这个)相关。
但这些都不用你操心,看起来更像是你的线程操作不正确。
比如要使用_beginthreadex代替CreateThread,让线程自行退出,

热点排行