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
.
我是运行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
.