我正在为 iPhone 编写应用程序,但出现以下错误:
malloc: * mmap(size=204800) 失败(错误代码=12) 错误:无法分配区域 * * 在 malloc_error_break 中设置断点进行调试
在过度调用此代码后,我得到了这个:
- (NSInteger) readInt:(NSInteger)defaultValue
{
NSRange sr = NSMakeRange(offset, [pdfData length] - offset);
NSData* sub = [pdfData subdataWithRange:sr];
char* buf = (char*)[sub bytes];
int off = 0;
char c;
do {
c = buf[off++]; //the app crash on this line
} while (c == NEW_LINE || c == CARRIAGE_RETURN||c == EMPTY_STRING);
int startString = off - 1;
do {
c = buf[off++];
} while (c != NEW_LINE && c != CARRIAGE_RETURN && c !=EMPTY_STRING);
off = off - 1;
offset = off + offset+1;
NSString *inStringSet = [[[NSString alloc] initWithData:[sub subdataWithRange:NSMakeRange(startString, off-startString)] encoding:NSASCIIStringEncoding] autorelease];
if ([PDFUtils isNumeric:inStringSet ]) {
NSString* intString = [[[NSString alloc] initWithData:[sub subdataWithRange:NSMakeRange(startString, off-startString)] encoding:NSASCIIStringEncoding] autorelease];
return [intString intValue];
}
return defaultValue;
}
在模拟器上运行时我没有这样的错误,但我的内存使用量达到了大约 700mb,但是在设备上运行时,应用程序崩溃了。我读过类似的问题,但完全没有运气。任何帮助指针将不胜感激。有些问题是关于查找和调试泄漏,但在 Instruments 中跟踪后,似乎没有泄漏,并且在自动释放池中正确释放了内存,只有内存高峰,然后正确释放。(应用程序仅在设备中崩溃)无论如何可以避免内存使用高峰?谢谢。