c++ - 通过异常检查数组何时安全绑定(bind)是否安全?

原文 标签 c++ arrays c++11 error-handling indexoutofboundsexception

这是我的代码:

template<class T>
void Matrix<T>::set(const int i, const int j, const T v) {
    try {
        m[i][j] = v;
    } catch (std::exception& e) {
        std::cout << "Standard exception: " << e.what() << std::endl;
    }
}

但是,我在这里安全吗?我的意思是,i和/或j可能超出范围,但是程序在出现分段错误时接收到,然后会引发异常吗?

如果这不是一个好的方法,那么我应该使用assert()吗?

最佳答案

没有。

仅从数组中读取时,异常检查可能还可以(但一点也不优雅)。

但是,在写入时,您可能会覆盖“外部”内存,这是一个巨大的安全风险,此外,它还可能会通过覆盖堆栈帧以及谁知道这会改变执行流程,也就是说,在某些情况下,异常处理程序不会即使实际预期会运行也可以运行。

最好的决定是检查每次迭代的索引。
假设您提到了assert编码,那么我想您确实知道数组的尺寸。

相关文章:

visual-c++ - 自定义分配器vs.promise和打包任务

c++ - 在C++中创建文件时如何获取IO错误消息?

c++ - 将int转换为char而不使用ASCII

c++ - 如何通过将光标悬停在UIAutomationElement的NamePropertyId上?

c# - 将纯C#对象传递给C++并在该对象上调用方法

java - Java至C++ Xor加密失败

javascript - Javascript .pop()和.sort()在for循环中无法正常工作

javascript - jQuery从数组选择选项-重复

python - Numpy对象数组

c++ - 调用C++方法指针