我被要求维护一个充满内存泄漏的大型C++代码库.在探索时,我发现我们有很多缓冲区溢出导致泄漏(它如何变坏,我不想知道).
我决定先删除缓冲区溢出.为了使我的bug更容易找到,可以使用哪些工具来检查缓冲区溢出?
在Linux上我会使用Valgrind.
考虑使用更现代的数据结构作为避免缓冲区溢出的方法.读入std :: string不会溢出,std :: vectors比数组更安全.我不知道您的应用程序是什么,并且可能因为您需要速度而使用原始缓冲区,但更常见的是它们被使用,因为这是原始程序员所熟悉的.
使用上述工具搜索内存泄漏是一个好主意,但它们可能找不到所有潜在的泄漏,而使用标准字符串和容器类可以消除您没有意识到的问题.
IBM的Purify将执行此操作,您在其下运行您的应用程序,它将为您提供所有错误(包括其他错误)的报告.
要消除内存泄漏,请使用UMDH - 运行您的应用程序,拍摄内存快照,再次运行,快照,然后使用diff工具查看自第一次运行以来所做的分配(请注意,您必须运行一次应用程序,并且尽可能快地拍摄快照.