【发布时间】:2023-12-12 23:19:01
【问题描述】:
我在下面的代码上运行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 就会检测到内存泄漏。为什么它没有检测到静态存储持续时间对象的泄漏?我在这里遗漏了什么吗?
【问题讨论】:
-
我很好奇你是否见过 valgrind 在
main()开始之前报告任何这样的内存泄漏,而不仅仅是这个例子?我不知道它什么时候开始监控,但main()似乎是一个合适的地方来下钩。 -
@WhozCraig 实际上我刚开始使用 valgrind(OS X,之前使用过 Instruments,因为 Yosemite 没有版本),只是在玩。
-
好嫉妒。我仍然没有在优胜美地上运行我的。我不认为你写了一篇关于设置它的博客 =P ? (一厢情愿,我知道)。
-
@WhozCraig 只需使用 macports 并通过
sudo port install valgrind-devel安装 valgrind-devel ;) 很简单。非开发版仍然不兼容,但开发版可以工作。 -
嘿。 谢谢你。在 MacPorts、xcode-select 和 valgrind-devel(因此是 automake、libtool 等)之间,我的 av-autoscan 刚刚得到了很好的锻炼。但它已安装并且看起来不错。再次感谢。
标签: c++ memory-leaks valgrind