有关数组越界问题

如题,今天记录一下数组的越界问题。从数组的定义开始说起。当我们需要定义多个同类型的变量我们会选择数组。它的定义格式是:*数据类型 数组名 [数组长度]*例如:int a [4]这是一个int类型的名称为a的数组它的长度为4,也就是它有四个可以存放int类数据的“框”。
在这里插入图片描述
如图,我们刚才定义了四个长度,那就放进去四个数据,这四个元素每一个都带了编号,而这个编号从0开始并非1。元素10的“位置”为0,新手是会晕头转向,但几乎所有的编程语言都从0开始对数组元素进行编号。要适应。上面提到元素的“位置“。位置成为索引,也就是说元素30位于索引2处。

越界是什么呢?比如说你定义了四个长度,你非要放五个元素,这怎么行呢。我们来看看万一越界会发生什么呢?
举个例子:visual6中内存分布有个特点,局部变量所在区域为栈中。我们来看这样一段程序
在这里插入图片描述
下面我们分析一下它的内存情况:如图所示运行过程。
在这里插入图片描述
定义了int i,i分配一个地址;数组也分配了地址图中可以看出,该程序是将数组元素归零。
首先i=0<=10,arr[0]=0,在i++;以此类推一直到i=9,i<=10继续执行,这时arr[9]也为0,在i++,这时候i=10.按道理十个空间到arr[9]这里就没有空间了,就应该结束了,但是继续执行,i=10依旧<=10,*继续执行归0,这是不久越界到了i的地址,本来i已经到9了这不,又给变成了0???重新开始呗!!*这不就死循环了一直循环!
附上举个例子查出来的地址,加深我们的记忆。
但是数组越界又不一定只会导致死循环,这个例子里是因为下方的地址给了i,万一下方的地址是空的呢?那不就相安无事?万一又是其他情况呢?所以我们说数组越界是一个很麻烦的问题。
在这里插入图片描述
在visual6中是这样子,那放在2012中是怎样的呢?更好一些编译器自然在Debug情况下越早发现问题越好,在该问题上他们的处理方式是一旦越界就会触碰到埋下的“地雷”,导致崩溃这不就更容易发现问题去改正了嘛!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值