iphone - 如何找到 malloc "double free"错误的原因?

我正在用 Objective-C 编写一个应用程序,但我收到了这个错误:

MyApp(2121,0xb0185000) malloc: *** error for object 0x1068310: double free
*** set a breakpoint in malloc_error_break to debug

当我释放 NSAutoreleasePool 时会发生这种情况,但我无法确定我要释放两次的对象。

如何设置他的断点?

有没有办法知道这个“对象0x1068310”是什么?

最佳答案

当一个对象被“双重释放”时,最常见的原因是您(不必要地)释放了一个自动释放的对象,然后当包含的自动释放池被清空时它被自动释放。

我发现追踪额外版本的最佳方法是在 Xcode 中为受影响的可执行文件使用 NSZombieEnabled 环境变量。如需快速了解如何使用它,请查看 this CocoaDev wiki page . (除了这个页面之外,Apple 还记录了一些在 Xcode 中调试代码的非常晦涩但有用的技巧,其中一些已经多次保存了我的培根。我建议在 developer.apple.com 上查看 this Technical Note — 链接跳转到 Cocoa 的 Foundation 框架部分)。

编辑:您通常可以在 Xcode 调试器中跟踪有问题的对象,但如果您使用 Instruments 来帮助您,这通常会容易得多。在 Xcode 中,选择 Run → Start With Performance Tool → Object Allocations,您应该能够将有问题的对象追溯到它的创建位置。 (如果您如上所述启用了僵尸,这将最有效。) 注意: Snow Leopard 向 Instruments 添加了一个 Zombies 工具,也可以从 Run 菜单访问。光是 29 美元就值了! ;-)

还有一个related SO question here .

关于iphone - 如何找到 malloc "double free"错误的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/971249/

相关文章:

objective-c - 标题中有两行文本的 UIButton (numberOfLines=2)

objective-c - Objective-C中的ivars和属性有什么区别

objective-c - Xcode 不断要求输入密码以使用系统钥匙串(keychain)

objective-c - .h 和 .m 文件中的@interface 定义之间的区别

ios - 在自动布局中将 subview 的 X 居中抛出 "not prepared for t

ios - 没有为应用商店上的应用程序找到有效的 'aps-environment' 权利字符串

ios - AFNetworking 发布请求

ios - UITableView 中的圆形 UIImageView 没有性能影响?

iphone - NSTimeInterval 到 HH :mm:ss?

objective-c - 我不想在开始更新、结束更新 block 中为 uitableview 设