C++静态和动态内存泄漏检测工具是如何工作的?通过这些工具的内存泄漏检测测试是否意味着程序中没有内存泄漏的机会?
发布于 2013-07-09 11:50:35
静态测试主要是查看源代码,并尝试为每个new找到匹配的delete (为每个malloc查找free )。
大多数动态测试将每个内存块标记为已分配,以指示是什么代码分配了该内存块。然后,当程序关闭时,它们在堆中查找尚未删除的块。如果他们发现了,他们会打印出数据,以表明是什么代码分配了泄漏的块。
这两种方法都可能失败。许多静态测试可能会被像异常这样的东西所欺骗,在这种情况下,您的代码似乎会无条件地删除已分配的内容,但当在new和匹配的delete之间抛出异常时,可能不会。
动态测试可能会被您未能测试泄漏内存的代码路径所欺骗(仅举一个简单的例子)。它们只跟踪您在执行期间执行的代码路径所分配的内存,因此如果有您没有执行的分配,它们无法提供有关正在删除的内存的任何信息。
https://stackoverflow.com/questions/17539209
复制相似问题