iOS问题:出现崩溃问题,崩溃定位在汇编而不是具体代码

2021-02-21  本文已影响0人  啦啦啊哈一无

iOS问题:出现崩溃问题,崩溃定位在汇编而不是具体代码

项目场景:

做一个软件,当接收到较大图片时,软件就会崩溃退出。而且定位在汇编,而不是以往的代码。

问题描述:

提示:

尝试了静态查找内存泄漏,动态查找内存泄漏,野指针,全局断点等等,都没有找到具体问题所在,然后,我就用了最笨的一种方法,一句一句代码的筛查,最后定位到了一句代码。memcpy(signalCache + currentLoc, dataByte, data.length);

Byte signalCache[5000];

int currentLoc = 0;

@implementation SignalCache

+(void)addDataToSignalCache:(NSData *)data {

    Byte *dataByte = (Byte *)[data bytes];

    memcpy(signalCache + currentLoc, dataByte, data.length);

}

原因分析:

这里查一下 memcpy的使用就明白了,很简单。memcpy()内存操作函数可以完成一些数据的复制、赋值等操作。查到原函数为void memcpy(voiddest, const void *src, size_t n);功能是由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内。source和destin所指内存区域不能重叠,函数返回指向destin的指针。

我这里的问题就是destin的内存区域留小了,所以收到较大内存时会崩溃。

//注意,source和destin都不一定是数组,任意的可读写的空间均可。

解决方案:

发现是signalCache[5000]的5000小了,改为了8000就好了。 

真的是很浪费时间的一个问题。

参考:

这里是引用 https://blog.csdn.net/iteye_2449/article/details/82162957?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=a02df5b4-8c05-4afa-a7a1-ff547f50a5f9&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

上一篇下一篇

猜你喜欢

热点阅读