【发布时间】:2013-07-28 07:58:54
【问题描述】:
#include <iostream>
#include <boost/thread/thread.hpp>
#include <malloc.h>
class callable {
public:
void operator()() {
std::cout << "Thread Run" << std::endl;
}
}
void run() {
callable c;
boost::thread t(boost::ref(c));
t.join();
}
int main() {
int alloc = mallinfo().uordblks;
run();
int leaked = mallinfo().uordblks - alloc;
if(leaked)
std::cout << "mem leak: " << leaked << std::endl;
return 0;
}
它确实在屏幕上打印“mem leak: 336”,有人可以解释这是为什么吗? 我希望“泄漏”为 0。
【问题讨论】:
-
POSIX 或 C 标准未指定此函数 mallinfo。我真的怀疑这个功能。
-
我建议将
alloc设为全局变量,并在程序的各个点添加类似于cout << "Mem status: " << mallinfo().uordblks - alloc << std::endl;的代码。这可以帮助您确定内存泄漏的位置。分享和享受。 -
@BobJarvis 好吧,在这个代码示例中,如果您将线程实例化注释掉,那么“泄漏”的内存为 0。
-
这似乎是一个线索。
标签: c++ memory-leaks malloc boost-thread