Ошибка Malloc «невозможно выделить регион» с кодом ошибки 12. Есть идеи, как решить эту проблему? - PullRequest
21 голосов
/ 12 декабря 2011

Я получаю эту ошибку и не знаю, что с этим делать:

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];

Ответы [ 3 ]

10 голосов
/ 14 августа 2012

Звучит странно, но у меня было то же поведение, когда основной поток был перегружен.

Использование памяти было достаточно оптимальным: приборы не показывали утечек, а объем оперативной памяти составлял около 2 МБ, при работе на устройстве не было предупреждений о памяти, все массовые выделения выполнялись в пулах автоматического выпуска и т. Д.

Нобыл очень огромный процесс хранения данных в БД (с использованием 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
  }
}

, решило мою проблему.

6 голосов
/ 12 декабря 2011

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

* Существует множество похожих вопросов о потоке стека, который может вам пригодиться.

0 голосов
/ 19 июля 2016

У меня была эта проблема из-за рекурсивного вызова в viewWillLayoutSubviews контроллера представления. Я сделал недействительным макет представления коллекции, что привело к бесконечному циклу многократного размещения представлений.

...