我有一段代码如下:
int arr[n];
int i, j, x, y;
for(y = 0; y < n; y++)
for(x = 0; x < n; x++)
// do stuff
// x = y = n
std::cout << arr[x][y];
代码是A *实现的一部分,更令人惊讶的是它工作得很好,但我注意到我实际上正在访问我的数组中的一个out of bounds元素。为什么g ++允许我这样做而不抛出任何异常?
答案 0 :(得分:1)
std::out_of_range
成员函数访问范围时,std::vector
会抛出 at()
。 (以及其他一些容器检查情况)。
其他超出范围的访问只会导致未定义的行为。
int arr[n];
在标准C ++中是非法的。您正在使用GNU扩展,当您走出界限时,可能还会导致未定义的行为。