【发布时间】:2018-05-05 14:36:31
【问题描述】:
这段代码肯定会抛出“向量下标超出范围”异常并弹出对话框。 但绝对没有任何反应。
std::vector<int> x;
for (int i = 0; i < 4; ++i)
x.pop_back();
我尝试通过Debug->Windows->Exception Settings 启用 C++ 异常,但没有帮助...
这是什么原因造成的??
为什么在 Visual Studio 2015 中禁用异常?
编辑: 我的问题保持不变,但对于这段代码:
std::vector<int> x;
std::cout << x.at(3) << '\n';
编辑 2 完整代码:
#include <iostream>
#include <vector>
int main()
{
std::vector<int> x;
x.at(3) = 123;
return 0;
}
什么都没扔,但reference 说应该扔
【问题讨论】:
-
看不到
pop_back()应该扔任何东西。参考资料说“例外:(无)”。 -
并且this 明确指出,如果向量为空,则会导致 UB。
-
at(3)为我抛出异常。你能发布不抛出的整个代码吗? -
@ampawd 您还没有在代码中添加 try/catch 块。你确定这是你正在执行的代码吗?在假定的无效访问之前添加打印语句以确保。
-
“那个运行时对话框”是一个关于抛出异常的C++程序和Windows交互的问题。要查看是否抛出异常,请捕获它。一旦您确定抛出了异常,您就可以尝试找出为什么 Windows 运行时机制没有告诉您发生了这种情况。
标签: c++ visual-studio exception