【问题标题】:malloc error -[CFString release]malloc 错误 - [CFString 发布]
【发布时间】:2011-01-19 10:37:54
【问题描述】:

由于某种原因,我的应用在执行特定操作时崩溃了。经过调查,我发现是因为发布了一些已经发布的东西。然后我在互联网上阅读到我可以使用我实现的 NSZombie 和 MallocStackLogging 来追踪这个问题的原因,并得到了这个结果。

NSZombie:2011-01-19 14:39:09.523 iota[13649:207] * -[CFString release]:发送给deallocated的消息 实例 0xeeaf510

malloc_history

ALLOC 0xeeaf510-0xeeaf52f [大小=32]: thread_a0041500 |开始 |主要 | UIApplicationMain | GSEventRun | GSEventRunModal | CFRunLoopRunInMode | CFRunLoopRun 特定 | CFRunLoopRun | __CFRunLoopDoTimer | __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION | __NSFireDelayedPerform | -[UITableView _userSelectRowAtIndexPath:] | -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] | -[CorpDirViewController tableView:didSelectRowAtIndexPath:] | -[CorpDirPersonViewController corpDirViewController:shouldContinueAfterSelectingContact:] | -[ContactItem mergeWithContact:] | -[ContactItem getValueForProperty:] | ABRecordCopyValue | CPRecordCopyProperty | CPRecordGetProperty | ABCMultiValueLoad | ABCDBContextFetchMultiValuePropertyIntoRecord | ABCDBContextFetchMultiValueEntries | CPSqliteStatementSendResults | 收集多值条目 | _sqliteStatementApplyValuesFromRecordWithNullValue | CFStringCreateWithCString | __CFStringCreateImmutableFunnel3 | _CFRuntimeCreateInstance | malloc_zone_malloc

现在我无法找出导致崩溃的具体原因。谁能帮帮我?

【问题讨论】:

  • 请将问题格式化为可读状态:-)

标签: iphone


【解决方案1】:

如您所知,您正在对已销毁的对象调用release。也就是说,您在对象上调用了多次release(在本例中为 NSString)。通过 NSZombieEnabled 完成的异常现在告诉您“一次太多”的发布在哪里完成。但大多数时候你都在寻找中间版本,这很难做到……

既然您知道它在哪里崩溃(因此应该知道涉及哪个变量),您需要通读您的代码,您也在哪里释放此变量或对象如何分配给该变量,然后检查这些来源。也就是说,您需要“回溯”对象的来源以及您对它做了什么。在它生命的某个地方,你要么忘记retain它,要么不小心把它release/autoreleased它在你不应该的地方。

【讨论】:

  • 但我们从不明确释放 NSString 对象。这里的 -[CFString release] 是什么意思?
  • CFString 是 NSString 的底层类。您确实释放了一个 NSString,异常证明了这一点;-) 现在您需要找出在哪里...
【解决方案2】:

验证您对该字符串的分配/释放。 alloc+retain 的数量必须等于 release 的数量。 不要释放自动释放对象。

【讨论】:

  • 如果您之前保留过自动释放的对象,则必须释放它。
  • 我注意到这个问题是从头文件中分配的 NSString 发生的。更改为非原子后一切正常!
猜你喜欢
  • 2011-08-11
  • 1970-01-01
  • 2013-11-04
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多