C:为什么我仍然可以访问一个空阵列?

时间:2015-03-13 13:43:48

标签: c arrays

在玩数组时,尝试使用这个程序:

#include <stdio.h>

int main ( void )
{
  int a[] = {};
  printf ( "%d\n", sizeof(a) );
  printf ( "%d\n", a[0] );
  printf ( "%d\n", a[1] );
  printf ( "%d\n", a[10] );
  printf ( "%d\n", a[100] );
}

不知何故,它成功编译而没有错误得到了这个结果:

0
-1216614400
134513834
-1080435356
-1080430834

为什么我能够在任何没有大小的索引处访问空数组?

1 个答案:

答案 0 :(得分:0)

在您的代码中

printf ( "%d\n", a[0] );
printf ( "%d\n", a[1] );
printf ( "%d\n", a[10] );
printf ( "%d\n", a[100] );

通过访问超出范围的内存来生成undefined behaviour