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