Valgrind 未检测到全局指针中的泄漏

Valgrind does not detect leak in global pointer

我是运行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 会检测到内存泄漏。为什么它不检测静态存储持续时间对象的泄漏?我在这里遗漏了什么吗?

它们仍然可以访问,因此不被视为泄露。如果你想显示甚至可到达的块,将 --leak-check=full --show-leak-kinds=all 传递给 valgrind。

一般来说,这种"leak"不是bug。在您的示例代码中,没有 "right place" 来放置相应的 delete.