【发布时间】:2016-03-16 12:13:09
【问题描述】:
我试图使用此代码为 try-catch 测试产生错误,我预计在访问 a[3](第四个)元素时会出现错误。即使没有出现错误,for 循环也必须在五次迭代后停止,这永远不会发生。
int a[3] = {1, 2, 3};
for(int i = 0; i < 5; i++)
{
std::cout << i << ": " << a[i] << std::endl;
}
输出:
0: 1
1: 2
2: 3
3: 1970756548
4: 4201552
5: 2686800
6: 2130567168
7: 0
8: 0
9: 2686824
10: 4198992
.
.
.
4150: 0
4151: 0
4152: 0
4153: 0
4154: 0
【问题讨论】:
-
如果这是 gcc,请查看 C++ compilation bug?
-
代码中的任何内容都与“try-catch 测试”无关。在 C++ 中产生可捕获异常的唯一方法是:1) 使用显式
throw,2) 使用指定用于引发 C++ 异常的标准语言功能。在 C++ 中,越界数组访问不会引发异常。它产生未定义的行为。您不能使用异常来捕获未定义的行为。 -
查看示例 here 以测试您的 try catch 块
标签: c++ arrays for-loop undefined-behavior