C ++静态和动态内存泄漏检测工具如何工作?通过这些工具传递内存泄漏检测测试是否意味着程序中没有内存泄漏的可能性?
答案 0 :(得分:1)
静态测试基本上会查看源代码,并尝试为每个delete
找到匹配的new
(并为每个free
找到malloc
。
大多数动态测试将每个内存块标记为已分配,以指示分配该块的代码。然后,当程序关闭时,它们会查找堆中尚未删除的块。如果他们发现任何问题,他们会打印出数据,以指示分配了泄漏块的代码。
这两个都可能失败。许多静态测试可能被异常之类的东西欺骗,在这些异常情况下,您的代码似乎无条件地删除了已分配的内容,但在new
和匹配的delete
之间抛出异常时可能不会。
动态测试可能被(仅一个简单示例)欺骗,因为您无法测试泄漏内存的代码路径。它们只跟踪您在执行期间执行的代码路径分配的内存,因此如果您没有执行分配,则它们无法提供有关该内存被删除的任何信息。