malloc:***错误:释放对象的校验和不正确 - 对象可能在被释放后被修改

时间:2013-11-07 16:02:29

标签: ios objective-c c crash malloc

我的iOS应用程序存在很大问题:它有时会崩溃但没有详细的调试错误。 堆栈跟踪为空。这些是堆栈跟踪中唯一的两行:

  1. 在UIApplicationMain中以"符号存根开始崩溃: - [_ UIHostedTextServiceSession dismissTextServiceAnimated:]"。
  2. 并报告" libsystem_c.dylib`malloc_error_break"。
  3. com.apple.main-thread中的

    Xcode调试器(连接设备)上的错误:

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

    我在malloc_error_break中使用libsystem_c.dylib设置了断点,没有来自调试器的任何反馈。我不知道要解决这个问题。

4 个答案:

答案 0 :(得分:40)

要找到问题的根源,请在Xcode中转到产品>方案>编辑方案,在“诊断”选项卡下启用所有Malloc设置和Guard Malloc。

然后,再次运行您的应用程序,Xcode将停在导致问题的行。

Scheme definition

答案 1 :(得分:24)

由于您在调试器中,您应该查看内存位置0x208a7614并查看其中的内容。内存中的数据可能有助于弄清楚出了什么问题。

正在发生的事情之一是:

  1. 你正在释放一个物品两次,

  2. 你正在释放一个从未分配的指针

  3. 您正在编写一个无效指针,该指针先前指向已释放的对象

  4. 由于堆栈跟踪是空的,因此在各个地方的代码中添加一些调试日志语句可能会很有用,看看是否可以缩小代码中问题所在的位置。使用Instruments中的内存工具也可能有所帮助。您可以尝试启用NSZombies,但这看起来像是C分配问题,而不是Objective-C问题。

    此外,在崩溃之前是否还有其他任何内容写入控制台?如果是这样,它可能会指出问题的来源。

答案 2 :(得分:2)

大家好我已经找到了这个解决方案,如果你正在使用nib或xib接口,当你想要推送一个viewcontroller对象时遇到这个问题,那么有时候会发生这个错误,你的应用程序会崩溃(特别是在iPad中出错)这是解决方案:

//格式如下

UINavigationController *nav=[[UINavigationController      alloc]initWithRootViewController:yourViewControllerObj];

[self.navigationController  presentViewController:nav animated:true completion:nil];

不要试图推动这种情况。

答案 3 :(得分:0)

如果您有此问题。 转到:产品->方案->诊断-> 然后启用 molical gaurd edge zombie object 然后关闭 然后去产品->停止 然后再 产品构建和运行。 祝你好运