尝试在catch块中使用功能时发生异常未处理错误

时间:2018-10-05 14:53:20

标签: c++

我正在尝试运行一个简单的代码,当它寻找矢量位置超出范围时会引发错误。但是当我运行代码时,出现错误

#include <iostream>
#include <vector>
using namespace std;

void error()
{
    throw(" a standard exception was caught, with message \n");
}

int main() {

    try {
        cout << "Creating a vector of size 5... \n";
        vector<int> v(5);
        cout << "Accessing the 11th element of the vector...\n";
        cout << v.at(10);
    }
    catch (const exception& e) {
        error();
    }
    system("PAUSE");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

error()函数正确执行。它将在catch块内引发未处理的异常。修改该函数以捕获并处理异常:

void error() {
    try {
        throw(" a standard exception was caught, with message \n");
    }
    catch (char const* e) {
        std::cout << "Exception thrown: " << e;
    }
}

话虽如此,您可能需要一个简单的方法:

catch (const exception& e) {
    std::cout << e.what();
}

相反,不是引发未处理的char const*异常的函数。

答案 1 :(得分:0)

因此at函数引发了一个异常,这正是您想要的。它使控制权按预期跳至catch块,为您采取一些替代/补救措施做好了准备。

但是随后,您从catch中抛出了另一个异常!没有什么可以处理的。您需要第二对try / catch包裹在整个包裹中才能捕捉到那对(因为这是当您从catch抛出异常给其他包裹时发生的情况)例外)。

目前尚不清楚您想做什么,但是也许写到std::cerr就足够了吗?