【问题标题】:Xcode: NSZombie not catching error [duplicate]Xcode:NSZombie 未捕获错误 [重复]
【发布时间】:2011-08-27 15:07:51
【问题描述】:

可能重复:
Xcode malloc error

我的游戏有时会因为这条消息而崩溃:

malloc: *** error for object 0x65cfcd4: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

按照建议,我在仪器中运行了分配工具以尝试查找泄漏并勾选启用 NSZombie 检测。它说它在执行期间正在检查僵尸。

但是应用程序崩溃并且没有捕获任何东西。

僵尸抓不到它的原因有哪些?

谢谢。

【问题讨论】:

  • 您要释放的对象的内存似乎被其他东西覆盖了。你不能用僵尸来解决这个问题 - 对象仍然存在,只是其他东西弄乱了它。做任何花哨的指针的东西?没有边界检查的 C 数组?选角?

标签: iphone objective-c xcode nszombie


【解决方案1】:

建议不要启用僵尸,僵尸只有 Objective-C,mallocreallocfree 是 C 分配内存的方式,僵尸工具不会捕获这些错误。在malloc_error_break 中设置断点并查看堆栈跟踪以解决错误。

【讨论】:

  • 嗨。我已经这样做了,但是堆栈没有显示任何有用的东西。包括的方法都不是我的。
  • 好吧,现在就展示一些关于 cocos2d 的东西。
【解决方案2】:

不用太花哨,您可以删除所有free 呼叫,看看它是否能解决问题。如果您的项目规模不是很大,这可能比您将使用的任何“专业工具”更快。如果它解决了问题,只需一一插入free 调用,答案就会显而易见。

如果您使用 cocos2d,只需删除所有那些“免费”调用。 C内存分配容易出错。

【讨论】:

  • 我正在使用 cocos2d,对不起,您的意思是删除所有版本吗?好大啊……
  • 等一下,你想让他在没有内存交换且物理内存量相当有限的设备上泄漏内存(可能有很多内存)?!
  • @JustSid 他可能正在模拟器中运行。如果它真的帮助他找到问题,谁在乎我们是否暂时打破免费记忆教条? (这并不是说在桌面应用程序中内存泄漏更容易接受,因为任何有价值的项目都是可以接受的。)
猜你喜欢
  • 2018-08-02
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2015-07-11
  • 2021-07-08
  • 2020-12-11
  • 1970-01-01
  • 2021-05-26
相关资源
最近更新 更多