【发布时间】:2018-07-09 05:31:09
【问题描述】:
Mac OS X。 我运行一个应用程序,它加载一个 odbc 驱动程序。我在 system.log 中看到消息:
malloc: *** 对象错误,释放对象的校验和不正确 - 对象ххх可能在被释放后被修改了
另外,我有这个驱动的c++源代码,但是没有看到malloc/free的问题在哪里。
如何检测和定位对象 xxx 是什么?
【问题讨论】:
-
首先对您的自己的代码进行代码审查。你有指针吗?你有数组吗?你有向量吗?你有动态分配的“数组”吗?如果这些问题中任何的答案都是“是”,那么请检查您如何使用指针、数组、向量等。很有可能您超出了动态分配内存的范围。
-
作为第二种选择,使用诸如Valgrind 之类的工具来调试内存分配和写入。如果您使用调试信息构建应用程序,那么 Valgrind 可以向您显示您越界或使用内存和指针做其他坏事的确切文件和行。
-
第三个选项,启用大量警告的构建。这应该是真正的第一个选项,第三个是静态分析工具(也称为linter)来分析你的代码。 Linters 比编译器更擅长查找麻烦的代码。
-
另外,请注意您的术语:“本地化”与您想要做的“定位”有很大不同。
-
我的 odbc 驱动程序实际上是 PostgreSQL odbc 驱动程序 v9