为什么我在下面的程序中获取Segfault而不是数组?

Chi*_*dev 0 c generic-programming

1.

int a=3,*p=&a;
p++;
*p=10;
Run Code Online (Sandbox Code Playgroud)

然后它给出了分段错误.

2.

int a[3]={1,2,3};
a[10]=10;
Run Code Online (Sandbox Code Playgroud)

然后它正常工作

Spi*_*rix 5

两个代码段都显示未定义的行为.

在这两个代码片段中,您都会写入一个无效的内存位置来调用Undefined Behavior.当你这样做时,任何事情都可能发生.它不一定是段错误或崩溃.它可能会工作一次,但下次再执行时会失败.