我正在运行valgrind --leak-check=full test.cpp
命令,对以下代码进行检测。
#include <iostream>
int* p = new int[42]; // no leak reported
int main()
{
p[0] = 42; // use it
std::cout << p[0];
}
而且没有泄漏报告:
==37293== LEAK SUMMARY:
==37293== definitely lost: 0 bytes in 0 blocks
==37293== indirectly lost: 0 bytes in 0 blocks
==37293== possibly lost: 0 bytes in 0 blocks
每当我将定义
int* p = new int[42];
移到 main()
内部,使它具有自动存储期,valgrind 都会检测到内存泄漏。为什么它不会检测静态存储期对象的泄漏?我是否漏掉了什么?
main()
函数开始之前就看到了valgrind报告中的任何内存泄漏,而不仅仅是这个例子?我不知道它何时开始监视,但在main()
函数中加入钩子似乎是一个合理的选择。 - WhozCraigsudo port install valgrind-devel
安装valgrind-devel即可;) 简单易行。非devel版本仍然不兼容,但devel版本可以正常工作。 - vsoftco