Ank*_*kur 8 c c++ memory-leaks
如果已知应用程序泄漏内存(执行时),那么在应用程序的源代码中找到此类内存泄漏错误的各种方法有哪些.
我知道某些解析器/工具(可能对代码进行静态分析)可以在这里使用但是有没有其他方法/技术可以做到这一点,特定于语言(C/C++)/平台?
mat*_*ekm 12
我认为valgrind是完成这项任务的最佳工具.
对于Windows:请参阅此主题:Valgrind是否有适合Windows的替代品?
有valgrind,可能还有其他很棒的工具.但是我会告诉你我做了什么,这对我来说非常好,因为很多次我在无法运行valgrind的环境中进行编码:
内存泄漏检测,动态和静态分析有两种常用技术.
在动态分析中,您运行代码并使用工具分析运行以查看最终泄漏的内存.动态分析往往非常准确,但只能正确分析您在工具中执行的特定执行.因此,如果您的某些泄漏只发生在某些输入中并且您没有使用该输入的测试,则动态分析将不会检测到这些泄漏.
静态分析分析源代码以创建所有可能的代码路径,并查看是否可能在任何代码路径中发生泄漏.虽然静态分析现在非常好,但它并不完美 - 你不仅可以得到假阴性(分析错过泄漏),你也可以得到误报(该工具声称你实际上没有泄漏时有泄漏).
有许多动态分析工具,包括Valgrind(开源但仅限于x86 Linux和Mac)和Purify(商业但也可用于Windows,Solaris和AIX)等众所周知的工具.维基百科也有一些其他动态分析工具.
在静态分析方面,我认为值得的唯一工具是Coverity(商业).维基百科再次列出了许多其他静态分析工具.