Malloc错误“无法分配区域”失败,错误代码为12.任何想法如何解决?

时间:2011-12-12 16:11:26

标签: ios memory-management malloc allocation

我收到此错误,不知道该如何处理:

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

3 个答案:

答案 0 :(得分:10)

听起来很奇怪,但主线程重载时我有同样的行为。

内存使用情况足够最佳:仪器显示没有泄漏,实时内存大约为2Mb,在设备上运行时没有内存警告,所有大量分配都是在自动释放池内完成的。

但是在主线程上创建数据到db(使用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
  }
}

解决了我的问题。

答案 1 :(得分:6)

谷歌搜索将展示很多关于使用乐器来了解你记忆力的教程:

如何调试内存泄漏: tutorial
http://www.raywenderlich.com/2696/how-to-debug-memory-leaks-with-xcode-and-instruments-tutorial

另一个:
查找Obj-C内存泄漏视频
http://www.youtube.com/watch?v=R449qEuexNs&feature=related

* stackoverflow上有许多similar questions可能会从中受益。

答案 2 :(得分:0)

由于视图控制器os.path.exists(src) >>> True 中的递归调用,我遇到了此问题。我使集合视图的布局无效,导致无休止地重复布置视图。