我在以下代码上运行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会检测到内存泄漏。为什么不检测静态存储持续时间对象的泄漏?我在这里错过了什么吗?
答案 0 :(得分:6)
他们仍然可以访问,所以不会被视为泄露。如果要显示甚至可以访问的块,请将--leak-check=full --show-leak-kinds=all
传递给valgrind。
一般来说,这种&#34;泄漏&#34;不是一个bug。在您的示例代码中,没有&#34;正确的位置&#34;放置相应的delete
。