我写了一个C
代码:
#include <stdio.h>
int main()
{
int i;
int a[4];
for( i =0;i<5;i++)
{
a[i]=i;
printf("a[%d]:%d ",i,a[i]);
}
return 0;
}
我使用gcc编译并成功运行,结果是:
a [0]:0 a [1]:1 a [2]:2 a [3]:3 a [4]:4
但你可以看到数组a
的大小为4,从0到3,我没有创建额外的内存来引用a[4]
,并且意外地它运行并且似乎没有错误。在{ {1}},我发现如果数组的索引超出界限,它会抛出异常。我只是不知道为什么在C语言中它运行得恰到好处。
答案 0 :(得分:1)
C不检查数组边界。只有当您读取或写入您的程序无权访问的内存时,才会发生分段错误。简单地越过数组边界不会使程序崩溃。
但是访问索引超出范围会调用未定义的行为。