【发布时间】:2017-09-09 13:06:29
【问题描述】:
您好,这段代码有问题
try {
double pom = imageHEX[0][0].real();
if (imageHEX != nullptr) {
for (int i = 0; i < SIRKA; ++i) {
delete[] imageHEX[i];
}
delete[] imageHEX;
}
}
catch (...) {
throw Vynimka(3);
}
尝试删除已删除的数组时程序崩溃。
但我不知道double pom = imageHEX[0][0].real(); 并尝试通过从不存在的索引中读取尝试捕获异常,但我不知道如何调用这些异常。
析构函数在程序工作时工作良好,但在应用程序退出时出现问题。我不知道为什么。
你有想法如何解决这个问题吗?谢谢
/// 我的问题是如何在 catch 块中捕获所有异常。或者尝试从不存在的索引读取时如何捕获异常。
类似于 Java 类异常。 -> 在java中捕获所有异常。
this try {
} catch (...){
... something
}
不行,程序也崩溃了..
这个错误
Exception thrown at 0x000000013F877BF2 in Semestrelka2D.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
如果有这个异常的处理程序,程序可以安全地继续。
【问题讨论】:
-
使用
std::vector而不是分配自己的数组,这使得整个问题变得无关紧要 -
崩溃也不例外。这不是 Java。
-
@trip06 未定义行为的一种可能结果。
catch (...)确实会捕获所有 C++ 异常,但访问无效内存不会导致 C++ 异常。在 Windows(您似乎正在使用)上,我相信它会引发结构化异常(Windows 事物)。谷歌“结构化异常处理”,如果那是你所追求的。 -
注意:Microsoft 的运行时将访问冲突称为“异常”,但这些都是 SEH 异常(MS 等效于 UNIX 信号),而不是 C++ 异常。他们与
try/catch无关。
标签: c++ exception destructor