#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
答案 0 :(得分:1)
不幸的是,对于调试程序员来说,当你在数组末尾写入时,C和C ++程序通常不会发生段错误。相反,如果操作系统允许,它通常会静默地写入指针算法。这通常会覆盖其他变量甚至程序代码,从而导致令人困惑和不可预测的错误。
我用过#34;通常&#34;在这里,因为根据标准,这是&#34;未定义的行为&#34; - 也就是说,编译器和运行时可以做任何他们喜欢的事情。
在开发和测试时,使用诸如electricfence
之类的库非常有用,它会对内存操作进行额外的检查,并使您的程序以您期望的方式失败。