Malloc error "can't allocate region" failed with error code 12. Any idea how to resolve this?

66,057

Solution 1

Googling will reveal quite a few tutorials on using instruments to understand what is going on with your memory:

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

And another:
Finding Obj-C memory leaks (video)
http://www.youtube.com/watch?v=R449qEuexNs&feature=related

*There are many similar questions on stackoverflow you might benefit from.

Solution 2

Sounds strange, but I had the same behavior when main thread was overloaded.

Memory usage was optimal enough: instruments shows no leaks and live memory was about 2Mb, no memory warnings while running on a device, all massive allocation was done inside autorelease pools etc.

But there was very huge process of storing data to db (using Core Data) made on main thread. Just moving the storing code to background process like this

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

fixed my problem.

Share:
66,057

Related videos on Youtube

brush51
Author by

brush51

**

Updated on November 16, 2020

Comments

  • brush51
    brush51 over 3 years

    i am getting this error and dont know what to do with that:

    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
    

    If i set a breakpoint to that line that occurs the error, i dont know what i have to search specially for. In instruments i have checked the allocations and the value is increasing until 14,5 GB of all allocations.

    Can someone give me help?
    brush51

    EDIT 1:
    More informations:
    - I am trying this in the simulator, not on the iOS device.
    - Thats all of the output(i am getting this error more times). - the error occurs on this line:

    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];
    
    • eric
      eric over 12 years
      "can't allocate region" means that there is no memory space left! Might be time to start looking into memory management and releasing unused resources.
    • buddhabrot
      buddhabrot over 12 years
      iOS, 14.5GB of allocation? Am I missing something here?
    • Max MacLeod
      Max MacLeod over 12 years
      no kidding. What's the ram on an iPhone 4? is it 1GB?
    • Paul McCabe
      Paul McCabe over 12 years
      Without the code to analyse it further, I'd take a stab in the dark and say that if you're allocating 14.5GB then the chances are you're running out of memory (iOS devices generally don't have that much memory). The error code=12 also suggests this.
    • Paul McCabe
      Paul McCabe over 12 years
      @MaxMacLeod I believe it's 500MB.
    • eric
      eric over 12 years
      Simulator has more memory capacity than the device but that still seems high lol. Is that the full error output?
    • brush51
      brush51 over 12 years
      See my Edit 1. Thanks for your answers.
  • Tamara
    Tamara over 11 years
    I'm not sure that I understand you correctly... You shouldn't put it to main.m, but of course you may try to use something the same in your application. Just place the activity you think to be overloaded instead of my call to a DataManager.
  • Prine
    Prine almost 10 years
    Thanks for your answer. This was exactly my problem. I was downloading and storing a JSON file (~90mb).. With moving the transactions into another thread I got rid of the problem.
  • ninjaneer
    ninjaneer over 8 years
    It's not working for me...and I checked, it's not a memory leak. I'm exporting a GIF using CGImageDestinationAddImage