Malloc エラー「領域を割り当てられません」がエラー コード 12 で失敗しました。この問題を解決する方法はありますか? 質問する

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 GB まで増加しています。

誰か助けてくれませんか?
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

奇妙に聞こえるかもしれませんが、メインスレッドがオーバーロードされたときにも同じ動作が発生しました。

メモリ使用量は十分に最適でした。インストルメントにはメモリリークが表示されず、ライブ メモリは約 2 MB で、デバイスで実行中にメモリ警告は表示されず、すべての大規模な割り当ては自動解放プール内で実行されました。

しかし、メインスレッドで行われたデータベースへのデータ保存(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
  }
}

問題を解決しました。

おすすめ記事