数组越界就是数组超过了边界。数组脚标是从0开始的,你定义的数组长度为5,那么你的脚标就只能是0、1、2、3、4 。向上或向下超过了超过了都是越界。数组定义时,就决定了数组的元素的个数,当访问数组的下标超过或到了元素的个数,访问的数值就不是数组的元素,数组就会发生越界异常,程序往往会崩溃。我们可以通过指定数组下标来访问这块内存里的不同位置,当你的下标过大时,访问到的内存就不再是这个数组的分内内存,就变成了它的变量内存,所以一定要在程序中判断是否越界,以保证程序的正确性。
定义:所谓数组越界,就是指数组下标变量的取值超过了初始定义时的大小,导致对数组元素的访问出现在数组的范围之外。
数组下标的取值范围只能预先推断一个值来确定数组的维数,作为秃头程序猿的我们,就得学会检验数组的边界啦。
一般情况下,数组的越界包括两种:数组下标取值越界与指向数组的指针的指向范围越界。
第一种:数组下标取值越界
意思就是访问数组的时候,下标的取值不在我们已经定义好的数组的取值范围内,而访问的是无法获取的内存地址。
例如,对于数组 int a[3],它的下标取值范围是[0,2](即a[0]、a[1] 与 a[2])。如果我们的取值不在这个范围内(如 a[3]),就会发生越界错误。贴个代码看看:
int a[3];
for(int i=0;i<4;i++)
a[i]=i;
for(int i=0;i<4;i++)
cout<
以上代码是错误的,因为我们定义数组长度为3,那么数组就为a[0]、a[1]、a[2],然而在for循环中i的循环条件为i=0且i<4,显然可以有0、1、2、3这四种取值,大于数组的取值范围,即数组越界了。
怎么修改?
把 i<4 改成 i<3 即可。
第二种:指向数组的指针的指向范围越界
一般在定义数组时,会返回一个指向第一个变量的头指针,对这个指针进行加减运算可以向前或向后移动这个指针,进而访问数组中所有的变量。但在移动指针时,如果不注意移动的次数和位置,会使指针指向数组以外的位置,导致数组越界。还是贴个代码就明白了:
int *p;
int a[5];
p=a; //数组a的头指针赋值给指针p
for(int i=0;i<10;i++)
{*p=i+10;p++; //指向下一变量}
以上为错误代码,for 循环会使指针 p 向后移动 10 次,每次都向指针指向的单元赋值。但是,这里数组 a 的下标取值范围是 [0,4](即 a[0]、a[1]、a[2]、a[3] 与 a[4])。因此,后 5 次的操作会对未知的内存区域赋值,导致系统发生错误。
正确的操作应该是指针移动的次数与数组中的变量个数相同。
怎么修改?
把 i<10 改成 i<5 即可。
c语言怎么判断数组越界
关键词: 数组越界 指向数组指针 c语言数组越界判断方法