【发布时间】:2011-09-18 17:17:00
【问题描述】:
我正在 Linux 环境中用 C 语言开发应用程序。我注意到以下代码仅在执行数百次后就泄漏了大量内存:
do {
pthread_t flushThread;
pthread_attr_t attr;
logevent_thread_t logThread = { Db , &do_curl };
if (( pthread_attr_init ( &attr ) == 0 ) &&
( pthread_attr_setdetachstate ( &attr , PTHREAD_CREATE_DETACHED ) == 0 ) ) {
pthread_create ( &flushThread , &attr , (void*)FlushThread , (void*)&logThread );
pthread_attr_destroy ( &attr );
}
} while(1);
刚开始写代码的时候,我只使用了pthread_create(),但是当我注意到泄漏时,我开始google'd并搜索了StackOverflow,并找到了以下URL:
这就是我初始化属性并“分离”启动线程的原因。我也破坏了属性。 我不能使用 pthread_join(),因为我不想要阻塞调用,我希望我的线程独立存在。
不幸的是,泄漏仍然存在。我没有更多的想法,将得到任何进一步的建议!
谢谢!
@arrowdodger:在不设置任何属性的情况下调用 pthread_detach() 也会泄漏。 我也尝试使用 setdetach 和 pthread_detach() 没有成功。
@drhirsch :我知道它会泄漏,因为当我让它运行 1 天时,我得到一个“内存不足”的内核恐慌。此外,使用 top 我可以看到越来越多的内存专用于我的过程(但我知道最好的方法是使用 valgrind)。
【问题讨论】:
-
你怎么知道这段代码泄露了内存?
标签: memory memory-leaks pthreads