码迷,mamicode.com
首页 > 其他好文 > 详细

内存覆盖

时间:2014-07-08 11:48:07      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:style   color   数据   代码   res   size   

bug逃不掉最终还是的你来解决,前几天遇到一个死机bug,刚开始感觉很奇怪,因为这代码我之前用
的好好的,把它封装成库利用回调调用就死机了。怀疑局部变量调用完后释放了,于是加了个static,
呵呵、、、正好不死了,但是后来看了看代码跟局部变量没有关系,但是找了找找不到原因后面就放弃了。
但事情就是巧了,今天在做测试的时候突然点了一个按钮字体全错了还有一点乱码,没办法只有把字体
指针的地址打印出来,发现点击完那个键之后指针变空了,郁闷啊!!!我只在初始化的时候赋了一次值
其他地方没有赋值了,哎。。。只得到处放打印了,最终定位到调用我刚才说到的调用回调函数的地方,
也是加了个static的地方。这下更无语了这里怎么会使得指针的地址置空了呢???没办法只得查了,后来
一条条语句屏蔽编译运行才找到原来错字memcpy()函数里,拷贝的容量大于了接收数组的容量。

对比一下两种情况,会发现就一点点的区别导致了覆盖

INT16 WaveBuff[CO_MEASURE_SENCONDS_MAX];

CO_SAVING_RESULT_GET realWaveData;
realWaveData.WaveBuff = WaveBuff;
realWaveData.buffLen = CO_MEASURE_SENCONDS_MAX;

//正好拷贝数组容量大小的数据

 

memcpy(realWaveData.WaveBuff, 0, sizeof(INT16)*realWaveData.buffLen);



INT16 WaveBuff[CO_MEASURE_SENCONDS_MAX];
CO_SAVING_RESULT_GET realWaveData;
realWaveData.WaveBuff = WaveBuff;
realWaveData.buffLen = sizeof(WaveBuff);

//拷贝的数据长度大于数据的容量,会使得数组后面的空间被覆盖

memcpy(realWaveData.WaveBuff, 0, sizeof(INT16)*realWaveData.buffLen);

内存覆盖,布布扣,bubuko.com

内存覆盖

标签:style   color   数据   代码   res   size   

原文地址:http://www.cnblogs.com/genu/p/3830793.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!