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

39 c crash malloc objective-c ios

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

  1. UIApplicationMain中的崩溃开始于"符号存根: - [_ UIHostedTextServiceSession dismissTextServiceAnimated:]".
  2. 并报告"libsystem_c.dylib`malloc_error_break".

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
Run Code Online (Sandbox Code Playgroud)

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

Ped*_*res 42

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

有了它,再次运行您的应用程序,Xcode将停在导致问题的行.

方案定义

  • 值得指出的是,Guard Malloc只能在模拟器中使用,而不能在真实设备上使用.请参阅:https://developer.apple.com/library/ios/documentation/Performance/Conceptual/ManagingMemory/Articles/MallocDebug.html (18认同)
  • dyld:无法加载插入的库'/usr/lib/libgmalloc.dylib',因为找不到图像 (2认同)

use*_*321 25

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

发生的事情是以下之一:

  1. 你释放一个物体两次,

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

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

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

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

  • 第四个可能的原因:将已分配块的结尾写入另一个当前未分配的块. (11认同)