编译器行为异常c ++

时间:2014-05-07 17:47:16

标签: c++

我正在使用这个简单的程序。

#include<iostream>
using namespace std;
int main(){
        int arr[200]={0};
        int i = 200;
        arr[i] = 1;
        cout << i << endl;
}

我希望结果是200;在我的系统中,它的显示结果为1。 任何人都可以解释这种异常行为。

1 个答案:

答案 0 :(得分:5)

您分配了一个包含200个元素的数组,它为您提供索引0到199.您将索引200处的项设置为1,这超出了数组的范围。 C ++很高兴让你踩到你想要的任何内存。您在i之后立即声明arr,因此它在内存中arr之后立即在堆栈上分配,因此当您越过数组末尾时将其设置为1元件。

您可以在i之前声明arr进行验证,看看会发生什么。或者将i设置为199,这可能就是您的意图。