C++ 超出范围异常
c++ out of range exception
>我正在创建一个函数,该函数遍历点网格并返回所有相邻点的索引。 对于网格的边缘,存在不存在的相邻点,因此我创建了一些尝试块来处理这些情况。 这是代码:
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;
}
相关文章:
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 为什么这个正则表达式C++在括号表达式中抛出无效范围异常?
- C++矢量超出范围异常
- 张量不会在超出范围索引时引发异常
- 如果一个对象是在本地创建的,并在C++中作为异常抛出,那么本地对象如何在其范围之外有效,即在 catch 块中?
- basic_string::替换的超出范围异常,而在范围内,正如调试相同参数的输出所证明的那样
- 当数字可能超出C++中特定数据类型的范围时如何处理异常?
- 程序崩溃,说向量不超出范围异常
- Windows 错误报告和超出范围的异常
- 对象在超出范围时是否被销毁,因为它们已引发异常.C++
- 从覆盖范围报告中删除自动生成的异常代码
- C++ 超出范围异常
- 为什么在 std::vector 中使用索引超出范围的运算符 [] 时没有出现异常?
- 为什么这会导致超出范围的异常
- 用于处理超出范围错误的异常类 - C++
- 当传递表示负值的十六进制时,C++stoll抛出超出范围的异常
- 字符串长度为10或更长的c++stol抛出范围外异常
- C++:如果抛出异常,那么超出范围的对象将被销毁
- 给定范围内的完美平方:循环执行异常
- 通过引用捕获(使用 catch)时异常对象的范围