gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:22:59 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com