2011-06-20 85 views
1

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

+0

你怎麼知道這段代碼泄漏內存? – hirschhornsalz

回答

0

我從你的鏈接中讀到的是你應該調用pthread_detach(),而不是使用DETACHED屬性創建它。