为什么不导致分段错误?

时间:2017-01-28 07:56:52

标签: c++ arrays

#include <iostream>
using namespace std;

int main(){
    int a[3], no;
    cout  << "Index Value\n";
    for(int i = 0; i < 100; i++){
        cin >> no;
        a[i] = no;
        cout << i << "\t" << a[i] << endl;
    }
    return 0;
}

我在这里初始化了 a [3] 。在for循环中,我将输入100次输入 a [] ,超过 [3] 的索引。
为什么不在之后立即给出分段错误,当我等于4 时 的 输入
1 2 3 4 5 6 7
输出
Index Value 0 1 1 2 2 3 4 0 5 5 6 6 7 7
当Index等于4时输出错误。打印0。预计4

1 个答案:

答案 0 :(得分:1)

不幸的是,对于调试程序员来说,当你在数组末尾写入时,C和C ++程序通常不会发生段错误。相反,如果操作系统允许,它通常会静默地写入指针算法。这通常会覆盖其他变量甚至程序代码,从而导致令人困惑和不可预测的错误。

我用过#34;通常&#34;在这里,因为根据标准,这是&#34;未定义的行为&#34; - 也就是说,编译器和运行时可以做任何他们喜欢的事情。

在开发和测试时,使用诸如electricfence之类的库非常有用,它会对内存操作进行额外的检查,并使您的程序以您期望的方式失败。