我在Qt下使用pthread
的程序遇到问题。
由于我开始使用外部库,我处理奇怪的内存泄漏。
为了表示问题,我准备了这个简单的例子:
extern "C" short __stdcall somefunction(some_parameters);
void *runThread( void *arg )
{
printf("I'm a thread...\n");
pthread_exit(NULL);
}
int main()
{
somefunction(some_parameters);
pthread_t thread;
pthread_attr_t attr;
while(1)
{
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create( &thread, &attr, &runThread, NULL);
pthread_attr_destroy ( &attr );
Sleep(1000);
}
}
如果我不在线somefunction(some_parameters);
或,请对pthread_...
内的while
注释然后泄漏停止了。
该图书馆来自第三方提供商,但我无法访问该图书馆的源代码。
库可能不是线程安全的吗?无论如何,我认为很奇怪,因为我没有从线程内部调用somefunction
。
造成这种奇怪行为的原因是什么?
编辑:不知道这是否有用,但这段代码是使用Qt5.2 + mingw编译的,该库是使用MSVC编译的,我是在链接程序到它的DLL。
提前致谢!
编辑:最后在使用线程时外部库中发生了一个错误,导致内存泄漏,然后发现第二次泄漏与pthreads相关(Detached pthreads and memory leak)谢谢大家的支持。
答案 0 :(得分:0)
如果some_function()调用了一些C运行时函数,那么如果QT的其余部分没有进行这些调用,则将其注释掉可能会阻止泄漏。测试结果可能取决于执行路径 - 在某些地方QT正确调用_beginthreadex。