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

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

项目场景:

做一个软件,当接收到较大图片时,软件就会崩溃退出。而且定位在汇编,而不是以往的代码。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210220220423512.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkwNjcwMQ==,size_16,color_FFFFFF,t_70#pic_center)

问题描述:

提示:
尝试了静态查找内存泄漏,动态查找内存泄漏,野指针,全局断点等等,都没有找到具体问题所在,然后,我就用了最笨的一种方法,一句一句代码的筛查,最后定位到了一句代码。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);
    
    int byteLen = currentLoc + (int)data.length;
    [SignalCache dealWithSignalCache:byteLen];
}

原因分析:

这里查一下 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

猜你喜欢

转载自blog.csdn.net/weixin_43906701/article/details/113899251