添加的元素多于分配的空间

时间:2016-01-17 14:33:03

标签: c++ arrays

在我的数据结构课中,老师给了我们一个简单的代码,用于从带有循环的数组中打印元素。我声明了一个包含10个元素的数组,但初始化了15个元素,值为5,而不是打印15个元素,知道其余元素将显示垃圾值。但它只输出5个元素。事实上,它显示了我将数组初始化的元素数量。我正在使用代码块13.12。 提前谢谢。

#include <iostream>
using namespace std;

int main(){
    int i,n;
    int arr[10];
    n=15;

    for(i=0;i<n;i++){
        arr[i] = 5;
    }

    for(i=0;i<n;i++){
       cout << arr[i] << endl;
    }

    return 0;
}

5 个答案:

答案 0 :(得分:1)

程序具有未定义的行为,因为数组外部的内存被覆盖。

这就是为什么在你的系统中程序仅输出5个元素的原因。在初始化数组时,变量n在随后的循环中被值5覆盖。

//...
int arr[10];
n=15;

for(i=0;i<n;i++){
    arr[i] = 5;
}
//...

答案 1 :(得分:0)

代码的行为未定义。通过推理它可能做什么,几乎没有什么可以获得的。只需修复数组大小。 (可能是其中一个越界写入覆盖了n)的值。

答案 2 :(得分:0)

这种类型的代码产生未定义的行为 - 即行为未由标准定义的代码,因此编译器可以做任何他们想要的事情。不要这样做。未定义行为的其他示例包括

  • 除以零
  • 读/写NULL指针
  • 溢出签名整数
  • 双免费
  • 等...

答案 3 :(得分:0)

C ++编译器不绑定检查数组大小。有时它会提供所需的输出,有时它会崩溃。这将导致未定义的行为

你绝对应该避免它。

答案 4 :(得分:0)

这很难编写,只需很少的努力或研究。这是你的作业,至少花时间去做它。

这是一些小帮助,但不是全部:

#include <iostream>
using namespace std;

int main(){
    int i,n;
    int arr[10];
    n=15;
    int x;

    for(i=0;i<n;i++){
    arr[i] = x
    cout << arr[i] << endl;
    }

return 0;    
}

要做到这一点,你需要做一些事情。我不会这样做的!