c - 如何修复仅在 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)```
解决方案
推荐阅读
- html - 如何从文本框和下拉列表中获取文本并将它们保存在 .csi 文件中,然后将它们发送到指定的 Outlook 或 G-mail?
- android - 如何从android 10中的位图获取uri
- r - 返回具有匹配条件的元素计数的表
- wpf - 从 PRISM 7 的配置文件中检索统一容器类型注册
- xml - 将复杂的 XML 数据导入多个 FileMaker 表
- javascript - 在 Reactjs 中使用 emoji-picker 包
- c# - 是否可以在 winforms 应用程序上检测 Windows 暗模式?
- python - 通过时间绘制电视剧:散点图
- bash - 如何在脚本中禁用 * 扩展?
- php - CSV 到关联数组(一列作为键,另一列作为值)