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++ codeif (pHead == NULL){ [color=#FF0000] *errno_tmp = ENOMEM;[/color] RTCCALLBACK(_RTC_FuncCheckSet_hook,(1));}
根本没判断errno_tmp指针是否有效,就直接赋值,导致崩溃,无法完成单步调试,纠结啊!!!!
不知道大家有没有碰到过此问题,又是怎么解决的??????????
直接修改VS代码好像无效,不知道还需要做什么操作~~~~~
[解决办法]肯定不是VS代码中的问题,你程序有问题。关键你程序最后调用的函数,内存问题。
[解决办法]如果是修改代码之后出现的这个问题,最好把注意力放在新加的代码上
[解决办法]别跟运行时库较劲了,检查你自己的代码吧,看一下此时的堆栈。
[解决办法]问题不在那个NULL,而是前面错了,
从出错的位置来看,和线程的数据块(有些C/C++运行库函数需要这个)相关。
但这些都不用你操心,看起来更像是你的线程操作不正确。
比如要使用_beginthreadex代替CreateThread,让线程自行退出,