下面是我创建了一个整数数组的程序,这些整数的大小是静态的,可以容纳五个元素。我为同一个数组的索引7分配了一个值4,这是超出范围的。编译器和运行时都没有显示任何错误,而是给出了答案4.
#include<iostream>
int main()
{
int ptr[5]={2,4,5,6,7};
ptr[7]=4;
std::cout<<ptr[7];
return 0;
}
我正在使用g ++版本4.7.2
答案 0 :(得分:3)
那是因为你正在做的是未定义的行为。
它可能会破裂,也可能不会。当您访问数组超出范围时,您不能依赖发生或未发生的任何事情,因为该行为未由语言或编译器定义。
答案 1 :(得分:2)
行为未定义。 C ++标准要求对数组边界进行运行时检查不是强制性的。这是为了防止性能下降。
某些编译器会发出此类错误,尤其是在调试版本配置中。