c - Valgrind memcheck 在商业库中发现大量条件跳转和无效读取

标签 c valgrind

我正在调试一个链接到商业 API 库(在 Linux 下)的程序。我正在使用 valgrind memcheck,因为我遇到了奇怪的行为,这可能是由于写入超出了分配的内存块所致:

valgrind --tool=memcheck --error-limit=no --log-file=memcheck.log ./executable

然而,首先映入我眼帘的是许多此类错误

Use of uninitialised value of size (4/8/16)

Invalid read of size (4/8/16)

Conditional jump or move depends on uninitialised value(s)

其中一些(但不是全部)出现在 __intel_sse2_strcpy__intel_sse2_strlen 中。此外,根据 valgrind 的说法,确实存在内存泄漏。 出现在图书馆中。当我编译该库附带的示例之一时,它们也会出现,因此它们不是我的编程错误。此外,它们始终出现在不同版本的库中。由于该库是闭源的,我似乎无法澄清这些错误是否是致命的。

实际上,这让我很难识别自己潜在的错误。看到这么多警告我有点惊讶,因为我倾向于修复自己的程序,直到 memcheck 不再打印这些警告(至少在我放弃它之前)。问题是:我是否可以考虑诸如保存忽略之类的错误,它们是否经常出现在打包软件中,或者它们甚至可能是误报(例如,因为库是通过优化编译的)?

最佳答案

我会说:

  1. 不,您不能认为忽略它们是安全的。 Valgrind 很好。
  2. 是的,如果原始开发人员从未在其代码中使用过 Valgrind 或类似工具,那么它们可能非常常见,因此可以合理地预期会出现一些点击。
  3. 我不认为它们是误报,这种情况很少见。

关于c - Valgrind memcheck 在商业库中发现大量条件跳转和无效读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28741650/

相关文章:

c - 结构有两个字段,每个字段都是一维数组。将结构对象传递给没有指针的函数,会改变结构对象吗?

c - valgrind:工具 'memcheck' 未安装

C++空程序内存泄漏

c - Valgrind 报告一个非常简单的 C 程序的错误

c - OS X Mavericks 上的 Valgrind

c - ARM汇编指针指向指针?

c - 如果共享内存应用程序工作在分布式内存架构上会发生什么?

C:尝试在屏幕上打印数据后出现段错误

c - 如何从 Newlib 在 GCC 中实现 printf?

c++ - valgrind 如何以及何时检测内存泄漏