web-dev-qa-db-ja.com

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

グーグルは、あなたの記憶で何が起こっているかを理解するために楽器を使用するためのかなりの数のチュートリアルを明らかにします:

メモリリークをデバッグする方法:tutorial
http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial

そしてもう一つ:
Obj-Cメモリリークの検出video
http://www.youtube.com/watch?v=R449qEuexNs&feature=related

*多くの 類似した質問 があります。

6
eric

奇妙に聞こえますが、メインスレッドが過負荷になったときに同じ動作をしました。

メモリ使用量は十分に最適でした:機器はリークを示さず、ライブメモリは約2Mbで、デバイスで実行中のメモリ警告はなく、すべての大規模な割り当ては自動解放プールなどで行われました。

しかし、メインスレッドで行われた(Core Dataを使用して)dbにデータを保存する非常に大きなプロセスがありました。格納コードをこのようなバックグラウンドプロセスに移動するだけです

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

私の問題を修正しました。

10
Tamara

この問題は、View ControllerのviewWillLayoutSubviewsの再帰呼び出しが原因で発生しました。コレクションビューのレイアウトを無効にしていたため、ビューを繰り返しレイアウトする無限のサイクルが発生しました。

0
JAL