Program received signal:  “EXC_BAD_ACCESS”.
(gdb) bt
#0  0x30011940 in objc_msgSend ()
#1  0x30235f24 in CFRelease ()
#2  0x308f497c in -[UIImage dealloc] ()
#3  0x30236b78 in -[NSObject release] ()
#4  0x30a002a0 in FlushNamedImage ()
#5  0x30250a26 in CFDictionaryApplyFunction ()
#6  0x30a001a4 in _UISharedImageFlushAll ()
#7  0x30a00738 in +[UIImage(UIImageInternal) _flushCacheOnMemoryWarning:] ()
#8  0x3054dc80 in _nsnote_callback ()
#9  0x3024ea58 in _CFXNotificationPostNotification ()
#10 0x3054b85a in -[NSNotificationCenter postNotificationName:object:userInfo:] ()
#11 0x3054dbc0 in -[NSNotificationCenter postNotificationName:object:] ()
#12 0x30a00710 in -[UIApplication _performMemoryWarning] ()
#13 0x30a006a8 in -[UIApplication _receivedMemoryNotification] ()
#14 0x30a005d8 in _memoryStatusChanged ()
#15 0x30217416 in __CFNotificationCenterDarwinCallBack ()
#16 0x3020d0b0 in __CFMachPortPerform ()
#17 0x30254a76 in CFRunLoopRunSpecific ()
#18 0x3025416a in CFRunLoopRunInMode ()
#19 0x320452a4 in GSEventRunModal ()
#20 0x308f037c in -[UIApplication _run] ()
#21 0x308eea94 in UIApplicationMain ()
#22 0x00002096 in main (argc=1, argv=0x2ffff514)

目前我有一个非常奇怪的错误在我的节目。有时候这种情况发生,有时候,它不。但这里有一个摘要什么:

程序启动时起:

  • 保存的数据(只是一个短plist由13个元素)载如果它存在。
  • 一个巨大的plist含1014串载入NSMutableDictionary.
  • 另一个plist含有78串被载入一个是.
  • a.mp4影片的播放。

发生错误部分,其中载ES观点是被拆除和用户是关于查看一串的1014串NSMutableDictionary.

这个错误不会发生在模拟器。它只发生在iPhone上,并有时它运行良好,但有时它粉碎.

然而,在阅读堆栈跟踪我看看CFDictionaryApplyFunction在那里,所以我想这可能是一个可能的原因。这是因为在模拟器上,它读出事情如此之快,整个文字典从plist被装载在一瞬间,而在设备上时,它读出速度较慢?老实说,我不知道究竟如何词典的工作。它不会读通过的所有1014串在一瞬间,或者它使用其他一些线阅读缓慢?请的建议。谢谢你。

有帮助吗?

解决方案

当你得到一个 EXC_BAD_ACCESS, 它常常意味着你想要呼叫对象的方法,是不是有可能的,因为它已经释放。

关于下一半的追踪,有一些 存储器的警告 呼叫,例如:

#12 0x30a00710 in -[UIApplication _performMemoryWarning] ()

这使得它看来,不关你的代码 直接 导致崩溃,而是一个系统的通知时存储器运行低。

近框架#0,这似乎是企图清除缓冲的 UIImage 对象,这似乎是不好的访问。

在此基础上,一个猜测是你们分配一个指向个返回值的一个构造便利;然后对象是个,你可能会觉得这很好因为你不用图像直接,但是存储警告试图访问。例如:

@interface MyClass {
  UIImage* myImage;
}
// ...
- (id) init {  /* the usual stuff */
  myImage = [UIImage imageNamed:@"bob_the.png"];
  return self;
}

在这个例子中,甚至如果你有一个保留的位置上 myImage, 你实际上不保留图像除非你设置的价值通过 self.myImage.因此,不久之后,这一呼吁,图像被释放,你已经有了一个指向没有男人的土地。

没有看到代码,我已经没有办法知道如果这是什么,实际上是怎么回事,但它是一种类型的错误,那是很容易的。

这些相关问题给予提示类似的崩溃: EXC_BAD_ACCESS 调试 问题1问题2.

最后,如果没有任何帮助,我建议找到一个 最小的再现 你的问题。硬盘的方式来做到这一点是复制你的代码,削减了一半,看看如果错误仍然存在,和重复,直到获得最小的代码你可以找到其再现的错误。它通常很容易调试从有(和更postable作为一个计算器的问题,也是!) 如果你知道的简单的方法,让我知道。

其他提示

你可能需要设置的 NSZombiesEnabled 环境变量。这样你的程序不会崩溃 EXC_BAD_ACCESS 在访问时释放的对象,而是记录翔实的消息。 这篇文章 解释得很好发生什么和如何将它设置在载。不管怎么说,永远不要忘记,禁用这种选择在生产释放,因为否则你的对象将永远不会被释放!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top