有很多方法可以检查内存泄漏程序。你最终得到了泄漏内存块的指针列表,但有没有一种很好的方法可以找到每个块的更多信息?例如:如果我知道对象是一个字符串,实际的字符串值可以使泄漏更容易找到。
RTTI是否有后门可以实现这一目标?
要解决的问题是,当你获得指针时,运行时系统已处于关闭状态,你得到原始内存块指针而不是指向对象的指针(尽管在很多情况下可能是相同的)。
答案 0 :(得分:6)
RTTI可能对您没有帮助。 RTTI仅在类具有虚方法时才有效,并且并非所有分配都是具有虚方法的对象。
您真正需要做的是将堆栈跟踪附加到您的分配。然后,您可以获取有关内存分配位置的信息。如果它是泄漏内存的对象,你会寻找一个类构造函数。
无论如何,那里有类似的东西吗?是。适用于Windows的免费库是Visual Leak Detector。有更多功能齐全的商业产品(如Bounds Checker和IBM的Rational Purify),但VLD效果很好。它帮助我无数次发现内存泄漏。
答案 1 :(得分:5)
我使用valgrind --leak-check = full,它会给我一个每个泄漏块的分配站点的堆栈跟踪。此信息方式比仅输入信息更有用。 valgrind(代表“Val grinned”) rock !
答案 2 :(得分:0)
我在KDevelop中使用它。