0
#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.C++ boost線程,下面是一個合法的內存泄漏?
不是由POSIX或C類標準規定的該功能mallinfo的。我真的懷疑這個功能。 – Saby
我建議在你的程序中的不同位置使'alloc'成爲一個全局變量並添加類似於'cout <<「Mem status:」<< mallinfo()。uordblks - alloc << std :: endl;'的代碼。這可以幫助您確定內存泄漏的位置。分享並享受。 –
@BobJarvis那麼,在這個代碼示例中,如果你要註釋掉線程實例,那麼「泄漏」的內存就是0. – roeyc