1

我正在为 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 中跟踪后,似乎没有泄漏,并且在自动释放池中正确释放了内存,只有内存高峰,然后正确释放。(应用程序仅在设备中崩溃)无论如何可以避免内存使用高峰?谢谢。

4

0 回答 0