C++ 静态和动态内存泄漏检测工具如何工作?通过这些工具通过内存泄漏检测测试是否意味着程序中没有内存泄漏的机会?
问问题
1211 次
1 回答
1
静态测试主要查看源代码,并尝试delete
为每个new
(和free
每个malloc
)找到匹配项。
大多数动态测试将每个内存块标记为已分配,以指示分配该块的代码。然后当程序关闭时,它们会在堆中查找尚未删除的块。如果他们找到了,他们会打印出数据以指示哪些代码分配了泄漏的块。
这两种方法都可能失败。许多静态测试可能会被异常之类的东西所迷惑,其中您的代码似乎无条件地删除了分配的内容,但当在new
和匹配之间抛出异常时可能不会delete
。
动态测试可能会被(仅举一个简单的例子)您未能测试泄漏内存的代码路径所愚弄。它们只跟踪您在执行期间使用的代码路径分配的内存,因此如果有您不使用的分配,它们无法提供有关该内存被删除的任何信息。
于 2013-07-09T03:50:34.883 回答