web-dev-qa-db-fra.com

L'erreur Malloc "ne peut pas allouer de région" a échoué avec le code d'erreur 12. Vous savez comment résoudre ce problème?

je reçois cette erreur et je ne sais pas quoi faire avec ça:

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

Si je mets un point d'arrêt sur cette ligne qui se produit, je ne sais pas ce que je dois rechercher spécialement. Dans les instruments, j'ai vérifié les allocations et la valeur augmente jusqu'à 14,5 Go de toutes les allocations. 

Quelqu'un peut-il me donner de l'aide?
brush51

EDIT 1:
Plus d'informations:
- J'essaie ceci dans le simulateur, pas sur le périphérique iOS.
- C'est toute la sortie (je reçois cette erreur plusieurs fois) .- l'erreur se produit sur cette ligne: 

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

Googling va révéler pas mal de tutoriels sur l'utilisation d'instruments pour comprendre ce qui se passe dans votre mémoire:

Comment déboguer des fuites de mémoire: (tutorial
http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial

Et un autre:
Recherche de fuites de mémoire Obj-C (video)
http://www.youtube.com/watch?v=R449qEuexNs&feature=related

* Il existe de nombreuses questions similaires sur stackoverflow, vous pourriez en bénéficier.

6
eric

Cela semble étrange, mais j'ai eu le même comportement lorsque le thread principal était surchargé. 

L'utilisation de la mémoire était suffisamment optimale: les instruments ne présentaient aucune fuite et la mémoire vive faisait environ 2 Mo, aucun avertissement de mémoire en cours d'exécution sur un périphérique, toutes les allocations massives étaient effectuées dans des pools de libération automatique, etc. 

Mais il y avait un très gros processus de stockage de données sur la base de données (en utilisant Core Data). Déplacer simplement le code de stockage dans le processus d'arrière-plan

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
  }
}

résolu mon problème.

10
Tamara

J'ai eu ce problème en raison d'un appel récursif dans viewWillLayoutSubviews d'un contrôleur de vue. J'invalidais la mise en page d'une vue de collection, ce qui provoquait un cycle sans fin de présentations répétées.

0
JAL