【问题标题】:valgrind leaks detected no matter what无论如何检测到 valgrind 泄漏
【发布时间】:2017-07-16 06:30:09
【问题描述】:

即使我编译和运行这样的程序:

int main() {
    return 0;
}

当我运行 valgrind --leak-check=yes ./a.out 时出现以下 valgrind 错误

==26391== LEAK SUMMARY:
==26391==    definitely lost: 0 bytes in 0 blocks
==26391==    indirectly lost: 0 bytes in 0 blocks
==26391==      possibly lost: 72 bytes in 3 blocks
==26391==    still reachable: 200 bytes in 6 blocks
==26391==         suppressed: 18,528 bytes in 153 blocks
==26391== Reachable blocks (those to which a pointer was found) are not shown.
==26391== To see them, rerun with: --leak-check=full --show-leak-kinds=all

我正在使用clang++ test.cpp 进行编译。我完全不知道如何解决这个问题。

谢谢!

【问题讨论】:

  • 您是否尝试过“==26391== 要查看它们,请重新运行:--leak-check=full --show-leak-kinds=all”?
  • 在 Linux 上我可能丢失了:0 个块中的 0 个字节。 “仍然可以访问”似乎与一些 Linux 库有关。
  • 在您的发行版的 glibc 错误跟踪器上报告它。这绝对不是你的错。

标签: c++ memory-leaks valgrind clang++


【解决方案1】:

Valgrind 手册有以下关于可能丢失的信息

这意味着一个或多个指向该块的指针链已被 找到,但至少有一个指针是内部指针。这个 可能只是内存中的一个随机值,恰好指向一个 块,所以除非你知道你有 内部指针。

这意味着所有报告的possibly lost 事件都没有泄漏。这需要通过代码阅读来确认以检查泄漏。

对于您的特殊情况,我们知道您的代码中没有发生泄漏。 您可能想用--leak-check=full --show-leak-kinds=all 再次运行valgrind

【讨论】:

    猜你喜欢
    • 2015-02-28
    • 2011-04-19
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2015-04-29
    相关资源
    最近更新 更多