我正在Linux环境中开发一个C应用程序。我注意到下面的代码只有数百处决后泄漏吨的记忆:分离pthread_create()泄漏内存
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上搜索,发现以下网址:
这就是为什么我初始化ATT ributes并启动线程“分离”。我也摧毁了这些属性。 我不能使用pthread_join(),因为我不想阻塞呼叫,我想让我的线程独立生活。
不幸的是,泄漏仍然存在。我没有更多的想法,并会得到任何进一步的建议!
谢谢!
@arrowdodger:调用pthread_detach()而不设置任何类型的属性也会泄漏。 我也试过用setdetach和pthread_detach()没有成功。
@drhirsch:我知道它泄漏,因为当我运行了一天,我得到一个“内存不足”内核恐慌。另外,使用top可以看到越来越多的memoery专注于我的过程(但我明白,最好的方法是使用valgrind)。
你怎么知道这段代码泄漏内存? – hirschhornsalz