如何在c ++中管理数组边界?

时间:2014-08-08 13:37:22

标签: c++

下面是我创建了一个整数数组的程序,这些整数的大小是静态的,可以容纳五个元素。我为同一个数组的索引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

2 个答案:

答案 0 :(得分:3)

那是因为你正在做的是未定义的行为。

它可能会破裂,也可能不会。当您访问数组超出范围时,您不能依赖发生或未发生的任何事情,因为该行为未由语言或编译器定义。

答案 1 :(得分:2)

行为未定义。 C ++标准要求对数组边界进行运行时检查不是强制性的。这是为了防止性能下降。

某些编译器会发出此类错误,尤其是在调试版本配置中。