Ошибка Malloc "не может выделить регион" не удалось с кодом ошибки 12. Есть идеи, как это решить?
Я получаю эту ошибку и не знаю, что с ней делать:
AppName(3786,0xa0810540) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Если я установил точку останова на эту строку, которая вызывает ошибку, я не знаю, для чего я должен искать специально. В инструментах я проверил распределения, и значение увеличивается до 14,5 ГБ всех распределений.
Кто-нибудь может мне помочь?
brush51
РЕДАКТИРОВАТЬ 1:
Дополнительная информация:
- Я пытаюсь это сделать в симуляторе, а не на устройстве iOS.
- То есть весь вывод (я получаю эту ошибку больше раз).
- ошибка возникает в этой строке:
NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchREntitySetsCards = [[[NSFetchRequest alloc] init] autorelease];
//NSFetchRequest *fetchREntityRelCardsAnswersNotes = [[[NSFetchRequest alloc] init] autorelease];
NSEntityDescription *entitySetsCards = [NSEntityDescription entityForName:@"EntitySetsCards" inManagedObjectContext:context];
//NSEntityDescription *entityRelCardsAnswersNotes = [NSEntityDescription entityForName:@"EntityRelCardsAnswersNotes" inManagedObjectContext:context];
setEntity:entityCard];
[fetchREntitySetsCards setEntity:entitySetsCards];
//[fetchREntityRelCardsAnswersNotes setEntity:entityRelCardsAnswersNotes];
NSArray *fetchedObjSetsCards = [context executeFetchRequest:fetchREntitySetsCards error:&error];
//The error is here--->
//NSArray *fetchedObjRelCardsAnswersNotes = [context executeFetchRequest:fetchREntityRelCardsAnswersNotes error:&error];
//Badges für TabBarItem Inbox setzen
setsCount = [context countForFetchRequest:fetchREntityUserSet error: &error];
cardsCount = [context countForFetchRequest:fetchREntityCard error: &error];
Ответы
Ответ 1
Googling покажет довольно много руководств по использованию инструментов, чтобы понять, что происходит с вашей памятью:
Как отлаживать утечки памяти: (учебник)
http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial
И еще:
Поиск утечек памяти Obj-C (видео)
http://www.youtube.com/watch?v=R449qEuexNs&feature=related
* Есть много похожих вопросов в stackoverflow, которые могут вам пригодиться.
Ответ 2
Звучит странно, но у меня было такое же поведение, когда основной поток был перегружен.
Использование памяти было достаточно оптимальным: приборы не обнаруживали утечек, а живая память составляла около 2 МБ, никаких предупреждений памяти во время работы на устройстве, все массивные распределения выполнялись внутри пулов авторекламы и т.д.
Но был очень большой процесс хранения данных в db (с использованием Core Data), выполненных в основном потоке. Просто переместите код хранения в фоновый процесс, подобный этому
dispatch_async(dispatch_get_global_queue
(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
BOOL result = NO;
result = [[DataManager sharedInstance] storeGuestsToDB];
dispatch_async(dispatch_get_main_queue(), ^{
//finalization
}
}
исправлена моя проблема.
Ответ 3
У меня была эта проблема из-за рекурсивного вызова в контроллере представления viewWillLayoutSubviews
. Я сделал недействительным макет представления коллекции, создавая бесконечный цикл многократного выделения представлений.