首页 > 解决方案 > 如何修复仅在 MacOS High Sierra (10.13.6) 上出现的 malloc 错误?

问题描述

在过去的几天里,我一直在为 malloc 错误而苦苦挣扎,我对解决方案的想法已经不多了。该项目(在 C 和 SDL2 中重新创建毁灭战士)在 macOS Mojave 和 Catalina(确切版本 idk)上运行良好,但在我的操作系统(High Sierra 10.13.6)上崩溃。我们正在用clang编译。

错误:

doom(76767,0x7fff9d07c380) malloc: *** error for object 0x7fe50486b800: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
[1]    76767 abort      ./doom

我已经尝试缩小发生错误的确切行的范围,并且似乎在整个程序中都可以访问释放的变量,即使我摆脱了所有调用free()(出于测试目的)。这就是我开始变得绝望的地方。

怎么会发生这样的事情?我在另一篇 SO 帖子中读到,问题可能不是无效的免费,而是错误的 malloc。你们将如何解决这个问题?另外,为什么这个问题只出现在 10.13 而不是 mojave 和 catalina?

发布代码示例有点困难,因为没有一个特定的行会导致问题。如果您想查看代码,我很乐意向您发送 github 链接。

Valgrind 输出:

==81281== Command: ./doom
==81281==
--81281-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option
--81281-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 2 times)
--81281-- UNKNOWN mach_msg unhandled MACH_SEND_TRAILER option (repeated 4 times)
==81281== valgrind: Unrecognised instruction at address 0x103bd1b7b.
==81281==    at 0x103BD1B7B: _dispatch_kq_poll (in /usr/lib/system/libdispatch.dylib)
==81281==    by 0x103BD1741: _dispatch_kq_drain (in /usr/lib/system/libdispatch.dylib)
==81281==    by 0x103BD0B0F: _dispatch_kq_unote_update (in /usr/lib/system/libdispatch.dylib)
==81281==    by 0x103BCBE3E: _dispatch_source_refs_register (in /usr/lib/system/libdispatch.dylib)
==81281==    by 0x103BCBF68: _dispatch_source_finalize_activation (in /usr/lib/system/libdispatch.dylib)
==81281==    by 0x103BC4F54: _dispatch_queue_resume_finalize_activation (in /usr/lib/system/libdispatch.dylib)
==81281==    by 0x103FFC581: _notify_lib_init (in /usr/lib/system/libsystem_notify.dylib)
==81281==    by 0x103FFCB89: notify_register_dispatch (in /usr/lib/system/libsystem_notify.dylib)
==81281==    by 0x10079BD07: CFUniCharPrecompose (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)
==81281==    by 0x103BB3DB7: _dispatch_client_callout (in /usr/lib/system/libdispatch.dylib)
==81281==    by 0x103BB3D6A: dispatch_once_f (in /usr/lib/system/libdispatch.dylib)
==81281==    by 0x10079BBBD: CFUniCharPrecompose (in /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation)```

标签: cmacosmemorycrashsdl-2

解决方案


推荐阅读