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

时间:2015-02-26 11:47:41

标签: 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 个答案:

答案 0 :(得分:0)

我会说:

  1. 不,你不能认为它们是安全的。 Valgrind很好。
  2. 是的,如果原始开发人员从未在他们的代码中使用Valgrind或类似的工具,它们可能非常普遍,期望点击一些是合理的。
  3. 我不认为他们是假的,这种情况很少见。