【问题标题】:How are array-bounds managed in c++? [duplicate]在 C++ 中如何管理数组边界? [复制]
【发布时间】:2014-08-08 13:37:21
【问题描述】:

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

【问题讨论】:

  • 允许编译器假设您不这样做。如果出了什么问题,那是你自己的错。如果没有,你有(不)幸运。

标签: c++


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    某些编译器确实会发出此类错误,尤其是在调试构建配置中。

    【讨论】:

      猜你喜欢
      • 2014-11-08
      • 2016-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多