您好我的代码存在问题
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();
并尝试通过尝试从未记录索引中读取异常,但我不知道如何称为这些异常。
析构函数在程序工作时工作良好,但是当Application退出时出现问题。我不知道为什么。
你有什么想法如何解决这个问题?感谢
///我的问题是如何捕获catch块中的所有异常。或尝试从不存在的索引读取时如何捕获异常。
类似于Java类Exception。 - &gt;捕获java中的所有异常。
this try {
} catch (...){
... something
}
没有工作,程序也崩溃了..
此错误
Exception thrown at 0x000000013F877BF2 in Semestrelka2D.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
如果存在此异常的处理程序,则可以安全地继续该程序。
答案 0 :(得分:2)
程序在尝试删除已删除的数组时崩溃。
Standard将此情况描述为“未定义的行为”。该程序可能会崩溃,也可能不会崩溃,但即使它没有崩溃,它仍然是一个无效的程序。
未定义的行为没有抛出异常,因此无需捕获任何内容。您唯一能做的就是避免删除已删除的项目,并避免访问已删除的项目。
通过内存分析器(例如valgrind)运行程序将帮助您识别导致未定义行为的各种内存问题 - 读取或写入已分配的区域,访问和删除已删除的项目,等等。
在您的情况下,切换到std::vector
似乎可以帮助您自动管理资源。