调试断言失败

Fak*_*ken 3 c++ visual-studio-2008

"Debug assertions failed!"在调试模式下运行程序时遇到此错误.我尝试在Visual C++网站上查看这个错误,但解释对我来说太先进了,他们与我对问题的最佳猜测没有任何相似之处.

我已经完成了我的代码并缩小了发生错误的点.它似乎发生在代码部分,我在计算机移动到程序的下一部分之前手动删除了一大堆堆数组.当我注释掉释放旧堆数组的部分时,程序运行得非常好.

有什么想法在这里发生?我在编程方面的知识仍然相对基础.

谢谢

我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

此代码来自选项卡: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;
Run Code Online (Sandbox Code Playgroud)

如果我评论这一部分,程序运行正常.

Han*_*ant 7

你的代码破坏了堆.第一个片段来自C运行时库,断言告诉您程序正在将错误的指针值传递给delete运算符.

注释掉删除语句只是隐藏了问题.当你继续开发程序时,它将以不同的方式回来困扰你.这个帖子中有一些调试技巧.学习如何捕获这些错误是任何C或C++程序员的成年礼.欢迎来到该组.

  • 那很快.恭喜. (2认同)