为什么以下代码不会产生分段错误?

ban*_*run 1 c++ arrays segmentation-fault

#include <iostream>
using namespace std;

int a[4];
int main(){
    int b=7;
    cout<<a[b]<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我试图访问未分配的内存.所以我希望输出是一个分段错误,而输出是一些垃圾值.

后来我将'b'增加到1000,现在输出是'Segmentation fault'.这种行为有特定的原因吗?

我正在使用gcc-4.3.2编译器.

Ani*_*han 6

如果您尝试访问不存在的内存地址(进程的地址空间),则可能会引发分段错误.

a[7]在这种情况下可能不在其可访问的空间之外,但a[1000]肯定是.但即使前者会爆发,当你最不期望它;)