我正在经历奇怪的行为。我有下面的代码片段,在调用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版本后出现此问题。
请告诉我这里缺了什么?
1条答案
按热度按时间nhhxz33t1#
如果单步执行发布代码,则进入
_DEBUG
分支:这意味着在代码中的某个地方有:
或者类似的东西。
如果定义了
_Debug
,请首先检入项目编译器设置。然后我通常会离开IDE,点击我的“指挥官”应用程序,在我的项目所在的整个文件夹中搜索包含文本
#define _DEBUG
的文件。此文件是您的罪魁祸首。