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

标签 iphone objective-c memory-management malloc autorelease

我正在用 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/

相关文章:

iphone - 如何找出 UITextField 导致 UIKeyboardWillShowNotification 的原因?

iphone - Facebook SDK : openActiveSessionWithPermissions completionHandler not called

iphone - iPhone 应用程序中的数据持久性

Objective-C - FMDB - 大型 SQLite 转储导入

ios - 更新 UIImageView 占用太多内存

iphone - NSString stringWithFormat 调用 XX 次导致内存警告

iphone - 如何像sqlite一样将整数值保存到NSuserDefault?

iphone - 使用 CGAffineTransform 对图像进行动画处理并在指定点获取 CGPoint?

c - 使用 SUN RPC 释放内存

string - Delphi字符串共享问题