Ios “Malloc错误”;can';t分配区域“;失败,错误代码为12。你知道怎么解决这个问题吗?

Ios “Malloc错误”;can';t分配区域“;失败,错误代码为12。你知道怎么解决这个问题吗?,ios,memory-management,malloc,allocation,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

我遇到了这个错误,不知道该怎么办:

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

有人能帮我吗?
刷子51

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

谷歌将发布不少关于使用仪器来了解你的记忆力的教程:

如何调试内存泄漏:(教程)

还有一个:
查找Obj-C内存泄漏(视频)


*您可能会从stackoverflow中受益良多。

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

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

但在主线程上,有一个非常庞大的过程将数据存储到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
  }
}

修复了我的问题。

由于视图控制器的
视图WillLayoutSubView中的递归调用,我出现了此问题。我正在使集合视图的布局无效,从而导致重复布局视图的无休止循环。

“无法分配区域”意味着没有剩余的内存空间!也许是时候开始研究内存管理并释放未使用的资源了。iOS,14.5GB的分配?我是不是遗漏了什么?不是开玩笑的。iPhone4上的内存是多少?是1GB吗?如果没有进一步分析的代码,我会暗中猜测,如果分配14.5GB,那么很可能内存不足(iOS设备通常没有那么多内存)。错误代码=12也表明了这一点。@MaxMacLeod我相信它是500MB。我不确定我是否正确理解您的意思。。。你不应该把它放到main.m,但是当然你可以尝试在你的应用程序中使用相同的东西。只需放置您认为过载的活动,而不是我打电话给数据管理器。谢谢您的回答。这正是我的问题。我正在下载并存储一个JSON文件(~90mb)。。通过将事务转移到另一个线程,我解决了这个问题。它对我不起作用……我检查过,这不是内存泄漏。我正在使用CGIMAGEDESTIONADIMAGE导出GIF