此代码应该通过弹出对话框将“向量下标超出范围”异常抛出。 但绝对没有任何反应。
div.server-status span.counter
我尝试通过std::vector<int> x;
for (int i = 0; i < 4; ++i)
x.pop_back();
启用C ++异常,但它没有帮助......
什么可能导致这个?
为什么在Visual Studio 2015中禁用了异常?
修改: 我的问题仍然相同,但对于这段代码:
Debug->Windows->Exception Settings
编辑2 完整代码:
std::vector<int> x;
std::cout << x.at(3) << '\n';
没有抛出任何东西,但是reference说它应该抛出
答案 0 :(得分:2)
为什么pop_back
必须抛出异常?
未定义在空容器上调用pop_back。
所以它是未定义的行为。当然不用扔。
答案 1 :(得分:0)
C++
fast 需要付出代价,这意味着不能在运行时检查所有内容。特别是在循环中,检查每次访问都会减慢速度。
您可以使用库的 debug 版本(如果编译器支持它们),那些应该抱怨访问不良。否则,一些编译器支持内存检查标志,以便在编译时检测越界访问。
您可以(我建议应该)使用assert()
(或类似)来检查边界,这只会检查调试版本并且在发布版本中的成本为零。
答案 2 :(得分:0)
项目正在使用不同的运行时库进行构建以进行链接。
解决方案: C / C ++ - &gt;代码生成 - &gt;运行时库:已更改为多线程调试(/ MTd)