[微软 VS 2013]C++在删除运算符"Debug Assertion Failed!"时失败
[MS VS 2013]C++ fail on delete operator "Debug Assertion Failed!"
当我试图编译我的(琐碎的,附在下面)代码时,我得到了这个错误:
调试断言失败!
程序:。。。。。。\Project1.exe
文件:f:\dd\vctools\crt\crtw32\misc\dbgdel.cpp
线路:52
表达式:_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
所以,这是我的代码:
class T1
{
private:
int* foo;
public:
T1()
{
foo = new int[4];
foo[0] = 1;
foo[1] = 2;
foo[2] = 3;
foo[3] = 4;
}
~T1()
{
delete[] foo;
}
};
int main()
{
T1 t1;
t1.~T1();
}
虽然它有点丑陋和不完整,但它无疑是正确的。我写这篇文章是在经历了完全相同的错误之后,代码执行了更复杂的内存管理,只是为了看看发生了什么。不过,我仍然不知道出了什么问题。
没有编译器错误/警告,没有链接器错误/警告。执行到达delete[]foo时发生错误;线
似乎这还不够疯狂,当我将"解决方案配置"从"调试"切换到"发布"时,程序执行得非常好——执行到主函数的末尾,没有任何错误。有什么线索可以解决这个问题吗?
您正在执行双重删除。首先调用~T1(),然后当main()超出作用域时调用。正如FirstJens所指出的,几乎从来没有一个好的理由直接调用析构函数。
该错误发生在调试模式下,因为在调试时会检查对象以查看它是否已被删除。如果您在给出错误的行上放置断点,您将看到第一次调用delete是可以的,而错误发生在第二次删除上,当对象超出范围时,会自动调用第二次。
相关文章:
- 流行"Debug Assertion Failed"
- ISALPHA 导致 C++ "Debug Assertion Failed"
- 凯撒密码程序中"Debug Assertion Failed!"问题
- 如何修复邻接列表中的"Debug Assertion Failed" "vector subscript out of range"
- "Debug assertion failed" 这种有什么问题?它应该按年份对包含电影对象的动态列表进行排序
- 什么是"debug assertion failed"
- sprintf_s() 失败并显示错误"debug assertion failed"
- C++指向对象删除的指针数组,"Debug assertion failure!"
- 获取错误"Debug Assertion Failed"
- 实现将字符串映射到 C++ 中的数组的哈希表。我一直在"Debug Assertion Failed",我不知道为什么
- typedef map, debug assertion on for loop, map/set incompatib
- 查找发生错误"Debug assertion failed"位置
- 突然"Debug assertion failed error"错误,无需进行任何代码更改。(在C++代码中)
- fprintf debug assertion fail
- "Debug Assertion"数组、头文件和声明
- [微软 VS 2013]C++在删除运算符"Debug Assertion Failed!"时失败
- 矢量"Debug Assertion Failed"
- Jsoncpp Json:读取器导致错误" Debug assertion... _pFirstBlock == pHead"
- 为什么在设置模式时,使用 getline 会导致"Debug assertion failed"消息?
- Visual Studio 2008 在调用 QDomElement::text() 函数时"Debug Assertion Failed"消息