如何用内存分配/释放错误检测对象?

时间:2018-07-09 05:31:10

标签: c++ macos odbc

Mac OSX。 我运行一个应用,该应用会加载odbc驱动程序。我在system.log中看到消息:

  

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

另外,我有此驱动程序的c ++源代码,但看不到malloc / free问题所在。

我如何检测和定位xxx对象是什么?

1 个答案:

答案 0 :(得分:1)

macOS / OS X有一个名为 Guard Malloc 的东西,它包含许多机制,可以在发生这种情况时检测到类似的问题(可能是内存覆盖或释放后写入)。失败。

要使用它,您要做的就是在启动应用程序之前设置一些环境变量,并确保您正在加载libgmalloc.dylib的情况下运行,例如:

DYLD_INSERT_LIBRARIES=/usr/lib/libgmalloc.dylib MallocGuardEdges=1 myprog

MallocGuardEdges被记录为这样做的地方:

  

如果已设置,malloc将在大量分配之前和之后添加保护页。

文档中也有这样的说法(我记得要这样做一次):

  

要启用使用Guard Malloc进行调试,请在Xcode方案编辑器中将项目配置为与Guard Malloc一起运行。

这样可以避免使用DYLD_INSERT_LIBRARIES技巧。

详细信息here