怎么抓住这个例外

时间:2017-04-13 12:00:07

标签: c++ exception destructor

您好我的代码存在问题

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.

如果存在此异常的处理程序,则可以安全地继续该程序。

1 个答案:

答案 0 :(得分:2)

  

程序在尝试删除已删除的数组时崩溃。

Standard将此情况描述为“未定义的行为”。该程序可能会崩溃,也可能不会崩溃,但即使它没有崩溃,它仍然是一个无效的程序。

未定义的行为没有抛出异常,因此无需捕获任何内容。您唯一能做的就是避免删除已删除的项目,并避免访问已删除的项目。

通过内存分析器(例如valgrind)运行程序将帮助您识别导致未定义行为的各种内存问题 - 读取或写入已分配的区域,访问和删除已删除的项目,等等。

在您的情况下,切换到std::vector似乎可以帮助您自动管理资源。