C:为什么我仍然可以访问空数组?

标签 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

我为什么能够在任何不应该有大小的索引处访问一个空数组?

最佳答案

在你的代码中

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

产生undefined behaviour通过访问越界内存。

关于C:为什么我仍然可以访问空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29033829/

相关文章:

c - 数列中的第 n 个元素,其中数字可被其数字之和整除

编译器正在跳过返回行。通过递归进行二分查找

c - 是什么让 GDB 拒绝破解?

javascript - 为什么返回 [ ['a' , 'b' ]],而不是 [ ['a' ,'b' ], ['c' ,'d' ]]?

arrays - 根据特定条件生成部分随机 bool 值数组

arrays - 当数组包含空格时bash

c - putchar(ch + 1) 没有立即放入 char

我可以从 SD 存储器而不是闪存在评估板上运行程序(嵌入式编程)吗?

Java矩阵数组txt文件

c - 我的二维数组之一出现段错误 (11)?