首页 > 代码库 > 内存覆盖

内存覆盖

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);