malloc: *** Mmap(размер =204800) не удалось (код ошибки =12)
Я пишу приложение для 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;
}
При работе на симуляторе у меня нет такой ошибки, но я использую около 700 МБ памяти, однако при работе на устройстве происходит сбой приложения. Я читал похожие вопросы, но не повезло вообще. Любые вспомогательные указатели будут с благодарностью. В некоторых проблемах говорится об обнаружении и устранении утечек, но после отслеживания в Instruments выясняется, что утечек нет, и память правильно освобождается в пуле автоматического освобождения, есть только высокий пик памяти, а затем она правильно освобождена. (приложение только сбой в устройстве) Есть ли способ избежать этого пика использования памяти? Благодарю.