C阵列分段仅在某个阈值之后才出现故障

apa*_*che 2 c arrays segmentation-fault

我正在看这个简单的程序.我的理解是,尝试修改超出最大索引的内存地址的值应该导致分段错误.但是,以下代码运行没有任何问题.我甚至能够打印出所有6个数组索引0-> 6

main()
{
  int i;
  int a[3];

  for(i=0; i<6; i++)
        a[i] = i;

}
Run Code Online (Sandbox Code Playgroud)

但是,当我将for循环更改为

for(i=0; i<7; i++)
Run Code Online (Sandbox Code Playgroud)

并执行该程序,它将是段错误.这几乎在我看来它是由malloc完成的某种额外填充.为什么这只发生第6个索引(s + 6)之后?更长/更短的阵列会发生这种行为吗?请原谅我是愚蠢的低级程序员:)

hum*_*odz 6

这几乎在我看来它是由malloc完成的某种额外填充.

你没有调用malloc().您a在堆栈内存中声明为3个整数的数组,而malloc()使用堆内存.在这两种情况下,访问最后一个元素(第三个a[2],在本例中)的任何元素都是未定义的行为.当它完成堆内存时,通常会导致分段错误.