捕捉双重免费并妥善处理

Ste*_*nov 1 c++ crash memory-management

我遇到了一些崩溃delete().我尝试delete()用try-catch 包装并正确处理它,但我仍然崩溃而不是陷入catch部分.

这是我尝试做的示例.

int *i = new int();
delete (i);
try {
    delete (i);
}catch (...) {
    std::cout << "Oops";
}
Run Code Online (Sandbox Code Playgroud)

问题是"为什么我不能这样抓住它?" 和"我怎么能正确地抓住这样的情况?".

nef*_*fas 5

delete运算符不会抛出异常:

例外(无)(直到C++ 11)

noexcept规范:noexcept(自C++ 11起)

cf cppreference.

双删除是编程错误.您不应该尝试处理它:使用调试工具来摆脱它们(以及使用RAII和使用RAII的标准类更好的内存管理)