C++ 超出范围异常

c++ out of range exception

本文关键字:异常 范围 C++      更新时间:2023-10-16

>我正在创建一个函数,该函数遍历点网格并返回所有相邻点的索引。 对于网格的边缘,存在不存在的相邻点,因此我创建了一些尝试块来处理这些情况。 这是代码:

try {
            all_below[j] = Mesh.matrix[r[i]][c[i] - j];
        }
        catch (const std::out_of_range& oor) {
            below = NAN;
            below_k = NAN;
        }

但是每当我尝试运行程序时,catch 语句都不会捕获异常并且程序崩溃(因为 Mesh.matrix 超出范围)。 我做错了什么?

编辑:

矩阵是 int 的 2D 向量。

如果 all_below 和 Mesh.matrix 是数组,那么如果您使用可用范围之外的索引,数组不会引发任何异常。

正如 Duck @Mooing所指出的,向量的下标运算符也不会引发异常。是成员函数 at() 引发异常。

std::vector 不会在使用 vector 的运算符 [ ] 的越界访问时引发异常。 如果要抛出异常,请使用 vector::at() 函数而不是 [ ]。

vector<int> vec;
vec.push_back(1);
vec.push_back(2);
try
{
    cout << vec.at(2) << endl;
}
catch (const out_of_range& e)
{
    cerr << e.what() << endl;
}