debugging C++ delete[]仅在发行版本中失败

rkkpypqq  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(233)

我正在经历奇怪的行为。我有下面的代码片段,在调用delete[] pOutputStr语句期间崩溃**(仅在发布模式下)**。

void MyFunction()

{

char* pOutputStr = new char[100];

//my other code which is nowhere related to this

delete[] pOutputStr; **// here its failing**

pOutputStr = NULL;

}

**请注意:**当我尝试在发布模式下调试时,我注意到代码流将进入调试模式。请参考以下代码:

void __CRTDECL operator delete(void* const block) noexcept

{
    #ifdef _DEBUG

    _free_dbg(block, _UNKNOWN_BLOCK); // my code comes here instead of else block which is release mode

    #else

    free(block); // ideally it should come here, since its release mode.

    #endif

}

我怀疑在我的代码的某个地方定义了_DEBUG,但事实并非如此。我还检查了项目属性的预处理器部分,在那里我也可以看到定义了NDEBUG。
你能告诉我,到底是什么问题吗?

将代码从VS2012迁移到VS2017版本后出现此问题。

请告诉我这里缺了什么?

nhhxz33t

nhhxz33t1#

如果单步执行发布代码,则进入_DEBUG分支:

void __CRTDECL operator delete(void* const block) noexcept 
{
    #ifdef _DEBUG

    _free_dbg(block, _UNKNOWN_BLOCK); // my code comes here instead of else block which is release mode

    #else
    //...
 }

这意味着在代码中的某个地方有:

#define _DEBUG

或者类似的东西。
如果定义了_Debug,请首先检入项目编译器设置。
然后我通常会离开IDE,点击我的“指挥官”应用程序,在我的项目所在的整个文件夹中搜索包含文本#define _DEBUG的文件。
此文件是您的罪魁祸首。

相关问题