c ++超出范围异常

时间:2014-02-09 17:39:52

标签: c++ arrays exception exception-handling

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

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矢量。

2 个答案:

答案 0 :(得分:3)

如果all_below和Mesh.matrix是数组,那么如果使用的索引超出可用范围,则数组不会抛出任何异常。

如前所述@Mooing Duck,向量的下标运算符也不会抛出异常。它是()的成员函数抛出异常。

答案 1 :(得分:0)

std :: vector不会使用vector的operator []在越界访问上抛出异常。如果要抛出异常,则使用vector :: at()函数而不是[]。