数组越界定义是什么?数组越界通俗解释 c语言怎么判断数组越界

2022-06-13 17:38:14
来源:幸福云阳网

数组越界就是数组超过了边界。数组脚标是从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语言数组越界判断方法

[责任编辑:]

为您推荐

时评

内容举报联系邮箱:99 25 83 5@qq.com

豫ICP备2020035338号-6 营业执照公示信息

Copyright © 2010-2020  看点时报 版权所有,未经许可不得转载使用,违者必究。