C语言的数组越界问题

C语言的数组越界问题

越界:超出数组下标的位置进行访问。
数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。因此,当你的下标过大时,访问到的内存,就不再是这个数组的内存。你访问的,将是其它变量的内存了。

举个例子
C语言的数组越界问题

可以进行编译,未报错。编译器并没有指出错误。

C语言的数组越界问题

但是我们可以看到从a[10]开始,都属于越界访问。注意数组范围是[0,9]

至于为什么不报错,是因为C和C++不进行边界检查,不检查下标是否越界可以提高程序运行的效率。

那么如何能够尽量避免发生数组越界呢?
我所能想到的几种方法如下,仅供参考:

1, 最简单直接的方法:显式指定数组边界;
C语言的数组越界问题

2, 使用宏来指定数组边界,和第一种道理一样;

C语言的数组越界问题

3,进行数组检查,设定一个上下界的参数范围
C语言的数组越界问题