C语言的数组越界问题
C语言的数组越界问题
越界:超出数组下标的位置进行访问。
数组占用了一段连续的内存空间。然后,我们可以通过指定数组下标来访问这块内存里的不同位置。因此,当你的下标过大时,访问到的内存,就不再是这个数组的内存。你访问的,将是其它变量的内存了。
举个例子
可以进行编译,未报错。编译器并没有指出错误。
但是我们可以看到从a[10]开始,都属于越界访问。注意数组范围是[0,9]
至于为什么不报错,是因为C和C++不进行边界检查,不检查下标是否越界可以提高程序运行的效率。
那么如何能够尽量避免发生数组越界呢?
我所能想到的几种方法如下,仅供参考:
1, 最简单直接的方法:显式指定数组边界;
2, 使用宏来指定数组边界,和第一种道理一样;
3,进行数组检查,设定一个上下界的参数范围