c++ - 未捕获 vector 的异常

标签 c++ visual-studio-2010 visual-studio try-catch std

我试图在其他地方找到这个问题,但我遇到的问题对我来说仍然没有意义。我正在使用 Visual C++ 2010,但我的程序出现 vector 超出范围的错误。问题是,它从来没有告诉我哪个 vector 和代码太大而无法检查每一个。我想用 try-catch 来减少东西,但我无法让它们捕获。这是我用来演示的一些示例代码。

try{
    std::vector<int> test;
    for(int i=0; i<10; i++){
        test.push_back(5);
}
if(test[10]=5)
{
}
if(test[-1]=5)
{
}
}
catch(std::exception ex)//also tried exception& and exception*
{
  std::cout << "blah";
}
catch(...){
  std::cout << "blah";
}

从其他帖子中,我发现了有关通过引用传递、使用 ... 的建议,以及 vector 异常始终由 std::exception 捕获的声明。

那么还有什么可以阻止这种情况发生吗?

最佳答案

std::vector::operator[] 不检查数组边界,因此不会引发 C++ 异常。所以在你的情况下你编程的 behavior is undefined (aka UB) .

您必须使用 std::vector::at 通过边界检查访问元素,这会抛出 std::out_of_range 如果!(pos < size()) .

顺便说一句,始终通过常量引用捕获异常,如下所示:

try {
 // ...
} catch(const exception_type_here& e) {
 // ...
}

并且永远不要使用 catch-all 子句而不重新抛出(就像你的第二个 catch )。绝不。

希望有帮助。祝你好运!

关于c++ - 未捕获 vector 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20294103/

相关文章:

visual-studio-2010 - 将一个项目的 Visual Studio 设置复制到另一个项目

.net - 测试上下文为空

c++ - 使用 SecureZeroMemory() 真的有助于提高应用程序的安全性吗?

c# - 如何使用 VB.NET 代码关闭监视器

c++ - 具有非默认构造函数且不使用 STL 的对象数组

c++ - 从 Visual C++ 调用 Delphi DLL

visual-studio - 异常 : In process hosting is not supported for AspNetCoreModule. 将 AspNetCoreModule 更改为至少 AspNetCoreModuleV2

c# - 如何防止 Visual Studio 缩进换行符 (C#)?

c++ - 重启后注册表项被删除

c++ - 从 C# 切换到 C++。我的代码有什么问题?我需要标题来完成我想做的事情吗?一个文件问题中的类定义