数组越界造成的其相邻的数组的内存空间被破坏的严重问题。
来源:互联网 发布:实变函数 前景 知乎 编辑:程序博客网 时间:2024/05/22 12:10
今天在调试程序发现了由于数组越界造成的无法预见的错误,情况是这样的:
假设在头文件中连续定义了如下两个变量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]这些明显越界的数组。
- 数组越界造成的其相邻的数组的内存空间被破坏的严重问题。
- 数组越界造成的std::bad_alloc中断
- 数组越界写入破坏程序堆栈导致的crash
- 关于数组的越界问题
- 隐蔽的数组越界问题
- 数组越界的另一问题
- 诡异的代码之数组越界造成的死循环
- 谨防动态数组越界造成的内存泄露
- vxworks下 数组越界 造成代码段被踩的经典例子
- 空数组的内存空间
- 郁闷的数组越界
- 【问题汇总】列表数组越界的问题
- 怎样解决数组越界的问题?
- java中二维数组的越界问题
- 静态数组的索引越界问题
- 多维数组的索引越界问题
- 关于strcpy 和数组越界的问题
- XCode6报数组越界错误的问题
- SQL Server数据导入到Oracle中的方法
- Popup窗口访问父窗口的5种方法以及相互传值
- linux HID 问题
- Android 中String.xml文件中的错误
- jmx rmi 穿越防火墙问题及jmxmp的替代方案
- 数组越界造成的其相邻的数组的内存空间被破坏的严重问题。
- flex里的tooltip的字体大小
- 使用Profiler分析程序性能
- C语言:内存使用
- Entity Framework 学习初级篇7--基本操作:增加、更新、删除、事务,处理并发问题
- hbase安装配置(整合到hadoop)
- 腾讯大讲堂-1.4亿同时在线背后的故事_学习笔记(二)
- BlazeDS介绍(http://blog.csdn.net/hgy82/article/details/5799272)
- 刘昊威新作—东田造型三里屯VILLAGE概念店