【发布时间】:2014-03-19 20:13:47
【问题描述】:
我正在使用valgrind's 工具memcheck together with GDB 试图追踪我的C 代码中的内存泄漏。
Valgrind 找到了内存的分配位置,但指向该内存的指针在被释放之前在代码中被扔了很多次。大约 99% 的时间这是正确释放的,但有时不是。 Valgrind 能否以某种方式帮助我找到我失去对该指针的控制权的确切位置,还是我需要查看这个极其复杂的代码才能自己找到它?
编辑:如果 Valgrind 无法向我提供此信息,如果有人能告诉我原因,我会很高兴。我的意思是 Valgrind 确实有关于内存分配位置的信息,如果我用 GDB 停止程序并要求进行泄漏检查,它会知道我是否丢失了指向该内存的指针。为什么 valgrind 不能“观察”这个指针并准确地告诉我什么时候丢失它?
【问题讨论】:
-
你当然得看代码,但我认为隔离泄漏是 valgrind 所做的。
-
当该指针被分配给其他东西或发生异常时,查找所有实例。这应该是大多数泄漏的原因。
-
您可以运行您的程序“valgrind --tool=memcheck --leak-check=yes --db-attach=yes ./a.out”。这样,您的程序将自动附加 gdb。这可能很有用,您可以进行实时调试并检查大部分信息。
-
@tmp 正如我所说我已经在这样做了 =)
标签: c memory-leaks valgrind