我正在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