Erreur Malloc" can't allocate region " a échoué avec le code d'erreur 12. Une idée de comment résoudre ce problème?

j'obtiens cette erreur et je ne sais pas quoi faire avec cela:

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 de rupture à cette ligne qui se produit l'erreur, je ne sais pas ce que je dois chercher 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 m'aider?

brush51

EDIT 1:

Plus d'informations:

- J'essaie ça dans le simulateur, pas sur le dispositif iOS.

- Thats tout de la sortie (je reçois cette erreur plus de fois). - l'erreur 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
demandé sur JAL 2011-12-12 20:11:25

3 réponses

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

comment déboguer les fuites de mémoire: ( tutoriel )

http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial

et un autre:

trouver des fuites de mémoire Obj-C ( video )

http://www.youtube.com/watch?v=R449qEuexNs&feature=related

*Il y a beaucoup de des questions similaires à sur stackoverflow peut vous être bénéfique.

6
répondu eric 2017-05-23 12:25:47

semble étrange, mais j'ai eu le même comportement quand le thread principal a été surchargé.

L'utilisation de la mémoire était suffisamment optimale: les instruments ne montrent aucune fuite et la mémoire en direct était d'environ 2 Mo, aucun avertissement de mémoire en cours d'exécution sur un appareil, toute l'allocation massive a été faite à l'intérieur des pools autorelease etc.

mais il y avait un très grand processus de stockage de données à db (en utilisant des données de base) faites sur le fil principal. Il suffit de déplacer le code de stockage vers le processus d'arrière-plan comme ce

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

a résolu mon problème.

10
répondu Tamara 2012-08-14 08:03:29

j'ai eu ce problème à cause d'un appel récursif dans le viewWillLayoutSubviews d'un contrôleur de vue . J'invalidais la disposition d'une vue de collection provoquant un cycle sans fin de vues à répétition.

0
répondu JAL 2016-07-19 20:00:37