c++语言 数组越界小例子,【C/C++】数组越界

在上篇中说到了内存问题,今天我也遇到了可以用内存映射来解释的问题。代码如下:

#include

using namespace std;

void main()

{

int i;

int a[5];

// int i;

cout<

for(i=0;i<=5;i++)

{

a[i]=0;

cout<

}

}

上面的程序中,发生了数组越界访问,那么将会发生什么情况呢?一般来说的话,会系统中断,出现提示框,然而,这里发生了死循环。

我首先用下面的程序查看了i和数组元素的地址:

#include

using namespace std;

void main()

{

int i;

int a[5];

cout<

for(i=0;i<5;i++)

{

a[i]=0;

cout<

}

}在我的电脑(小端模式)下结果如下:

i的地址为:  12FF44

a[0]的地址为:  12FF30

a[1]的地址为:  12FF34

a[2]的地址为:  12FF38

a[3]的地址为:  12FF3C

a[4]的地址为:  12FF40

按照这种内存存储方式,a[5]的地址为:  12FF44 与i的地址相同!又因为我令a[i]=0,则每当循环到a[5]=0时,i=0,从而满足了循环条件,陷入了死循环。

当我把变量定义顺序改变时,将i在数组后定义即:

#include

using namespace std;

void main()

{

int a[5];

int i;

cout<

for(i=0;i<5;i++)

{

a[i]=0;

cout<

}

}输出的地址为:

i的地址为:  12FF30

a[0]的地址为:  12FF34

a[1]的地址为:  12FF38

a[2]的地址为:  12FF3c

a[3]的地址为:  12FF40

a[4]的地址为:  12FF44

这时若发生越界的话,a[5]的地址为:  12FF48 与i的地址不同,系统会中断,出现错误提示框

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值