数组越界造成的其相邻的数组的内存空间被破坏的严重问题。

 今天在调试程序发现了由于数组越界造成的无法预见的错误,情况是这样的:

假设在头文件中连续定义了如下两个变量m_lAiLastTime和m_fVx(为什么要连续,因为连续的定义就意味着编译器再为这两个变量分配内存空间时候也是连续地址分配的),都是7维的,使用的时候用后面5个元素,即[2]-[6]这个6个元素,第一个元素和第二个元素[0]-[1]不使用,但由于笔误将第一个变量定义成一维数组m_lAiLastTime[1]了。

 long m_lAiLastTime[1];     //应该是m_lAiLastTime[7];  
 float m_fVx[7];

在构造函数中对m_fVx初始化,

m_fVx[2]=99.419998
m_fVx[3]=99.730003
m_fVx[4]=100.239998
m_fVx[5]=99.440002
m_fVx[6]=100.500000

在定时器中对m_lAiLastTime[2]、m_lAiLastTime[3]、m_lAiLastTime[4]、m_lAiLastTime[5]、m_lAiLastTime[6]这5个数进行赋值操作,

结果就会神奇的发现m_fVx[2]、m_fVx[3]、m_fVx[4]、m_fVx[5]这四个数被修改成零了。TRACE输出:

m_fVx[2]=0.000000
m_fVx[3]=0.000000
m_fVx[4]=0.000000
m_fVx[5]=0.000000
m_fVx[6]=100.500000

 原因就在于m_lAiLastTime[1]至m_lAiLastTime[6]这个6个元素侵犯了m_fVx[0]至m_fVx[5]这6个元素的内存空间,造成m_fVx[0]至m_fVx[5]这6个元素的值被破坏。

 

奇怪的是为什么编译器不能发现这么明显的错误呢?! 明明只定义了m_lAiLastTime[1],却使用了m_lAiLastTime[2]、m_lAiLastTime[3]、m_lAiLastTime[4]、m_lAiLastTime[5]、m_lAiLastTime[6]这些明显越界的数组。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值