为什么有时可以调用数组超出范围

时间:2015-09-11 11:41:00

标签: c arrays indexing

我写了一个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语言中它运行得恰到好处。

1 个答案:

答案 0 :(得分:1)

C不检查数组边界。只有当您读取或写入您的程序无权访问的内存时,才会发生分段错误。简单地越过数组边界不会使程序崩溃。

但是访问索引超出范围会调用未定义的行为