C++ C++;boost线程,以下是合法的内存泄漏吗? #包括 #包括 #包括 类可调用{ 公众: void运算符()(){ std::cout
在32位C int类型的64位系统上,struct mallinfo中的int字段可能 溢出,或者环绕到小值或负值,或者希望在 这是一个已知的C库问题,而Devel::Mallinfo不尝试这样做 请查看以下链接:C++ C++;boost线程,以下是合法的内存泄漏吗? #包括 #包括 #包括 类可调用{ 公众: void运算符()(){ std::cout,c++,memory-leaks,malloc,boost-thread,C++,Memory Leaks,Malloc,Boost Thread,在32位C int类型的64位系统上,struct mallinfo中的int字段可能 溢出,或者环绕到小值或负值,或者希望在 这是一个已知的C库问题,而Devel::Mallinfo不尝试这样做 请查看以下链接: 我建议您使用POSIX或C标准接受的其他函数。此函数mallinfo不是POSIX或C标准指定的。我真的怀疑此函数。我建议将alloc设置为全局变量,并添加类似于cout@BobJarvis的代码。在这个代码示例中,如果您注释掉线程实例化n那么“泄漏”的内存是0。这似乎是一个线索。
我建议您使用POSIX或C标准接受的其他函数。此函数mallinfo不是POSIX或C标准指定的。我真的怀疑此函数。我建议将
alloc
设置为全局变量,并添加类似于cout@BobJarvis的代码。在这个代码示例中,如果您注释掉线程实例化n那么“泄漏”的内存是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;
}