我不断遇到这种情况"Debug assertions failed!"
当我在调试模式下运行程序时出错。我尝试在 Visual C++ 网站上查找此错误,但这些解释对我来说太先进了,而且它们与我对问题的最佳猜测没有任何相似之处。
我已经检查了我的代码并缩小了错误发生点的范围。这似乎发生在代码部分中,在计算机移动到程序的下一部分之前,我手动删除了一大堆堆数组。当我注释掉释放旧堆数组的部分时,程序运行得非常好。
知道这是怎么回事吗?我的编程知识还是比较基础的。
Thanks
我使用的是 Visual C++ 2008。
更多信息:
断点在此代码块处触发:
void operator delete(
void *pUserData
)
{
_CrtMemBlockHeader * pHead;
RTCCALLBACK(_RTC_Free_hook, (pUserData, 0));
if (pUserData == NULL)
return;
_mlock(_HEAP_LOCK); /* block other threads */
__TRY
/* get a pointer to memory block header */
pHead = pHdr(pUserData);
/* verify block type */
_ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));//<---- break point triggers
_free_dbg( pUserData, pHead->nBlockUse );
__FINALLY
_munlock(_HEAP_LOCK); /* release other threads */
__END_TRY_FINALLY
return;
}
此代码来自选项卡:dbgdel.cpp
我“缩小”的导致此问题的代码部分是这样的:
delete [] topQuadanglesPositions;
delete [] fourClamps;
delete [] precaculatedClamp1;
delete [] precaculatedClamp2;
delete [] precaculatedClamp3;
delete [] precaculatedClamp4;
delete [] area;
delete [] hullConfiguration;
delete [] output;
delete [] prunedListClamp1;
delete [] prunedListClamp2;
delete [] prunedListClamp3;
delete [] prunedListClamp4;
delete [] numValidLocations;
如果我注释掉这一部分,程序就可以正常运行。
您的代码正在破坏堆。第一个片段来自 C 运行时库,断言告诉您程序正在将错误的指针值传递给删除运算符。
注释掉删除语句只会隐藏问题。当你继续开发程序时,它会以不同的方式回来困扰你。里面有一些调试技巧这个线程 https://stackoverflow.com/questions/1010106/how-to-debug-heap-corruption-errors。学习如何捕获此类错误是任何 C 或 C++ 程序员的必经之路。欢迎加群。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)