Closed zhahao closed 8 months ago
这里最终还是通过 strdup 创建了堆内存,还去用区分是否len > 1000000真的是迷之操作。
貌似 至今没解决这个问题 4.3.0了
和线程有关系,在主线程执行一般不会Crash,因为主线程的栈空间比较大。在子线程超过512K会直接野指针。
和线程有关系,在主线程执行一般不会Crash,因为主线程的栈空间比较大。在子线程超过512K会直接野指针。
经过本地环境复现,目前已经可以稳定复现该问题。下个版本会提供修复方案。
和线程有关系,在主线程执行一般不会Crash,因为主线程的栈空间比较大。在子线程超过512K会直接野指针。
经过本地环境复现,目前已经可以稳定复现该问题。下个版本会提供修复方案。
已经修复,需要升级到4.3.3版本:https://github.com/aliyun/aliyun-log-ios-sdk/releases/tag/4.3.3
版本:3.1.16 测试代码: `
(void)touchesBegan:(NSSet<UITouch > )touches withEvent:(UIEvent *)event { [super touchesBegan:touches withEvent:event];
// 模拟栈被占用很多的情况 char cStr [100000];
NSMutableString *str = [NSMutableString new]; for (NSInteger i = 0; i < 1000000 - 1; i ++) { [str appendString:@"1"]; }
[self convertToChar:str]; }
/// 从LogProducerClient源码复制出来的 -(char)convertToChar:(NSString)strtemp { NSUInteger len = [strtemp lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1; if (len > 1000000) return strdup([strtemp UTF8String]); char cStr [len]; [strtemp getCString:cStr maxLength:len encoding:NSUTF8StringEncoding]; return strdup(cStr); }
` crash信息:Thread 1: EXC_BAD_ACCESS (code=1, address=0x16f5b0bf0)
当栈被占用很多的时候,
[strtemp getCString:cStr maxLength:len encoding:NSUTF8StringEncoding];
这行代码会造成坏内存访问,可能是StackOverflow了