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)之后?更长/更短的阵列会发生这种行为吗?请原谅我是愚蠢的低级程序员:)
这几乎在我看来它是由malloc完成的某种额外填充.
你没有调用malloc().您a在堆栈内存中声明为3个整数的数组,而malloc()使用堆内存.在这两种情况下,访问最后一个元素(第三个a[2],在本例中)的任何元素都是未定义的行为.当它完成堆内存时,通常会导致分段错误.