2008-09-25 67 views
3

假設我有以下代碼:pthread_detach會爲我管理我的記憶嗎?

while(TRUE) { 
    pthread_t *thread = (pthread_t *) malloc(sizeof(pthread_t)); 
    pthread_create(thread, NULL, someFunction, someArgument); 
    pthread_detach(*thread); 
    sleep(10); 
} 

請問分離線程釋放由malloc的分配的內存,或者是說什麼我現在要做的?

回答

10

編號pthread_create()無法知道線程傳遞給它的指針是動態分配的。 pthreads在內部不使用此值;它只是將新線程ID返回給調用者。您不需要動態分配該值;您可以改爲傳遞本地變量的地址:

pthread_t thread; 
pthread_create(&thread, NULL, someFunction, someArgument); 
1

您需要自己釋放內存。最好簡單地在堆棧中分配pthread_t變量,而不是堆。

+0

OP的問題在想,因爲`pthread_create`需要一個`pthread_t`參數,所以你需要一個指針變量來傳遞。這是開始C程序員的一個經典錯誤 - 聲明指針變量用作參數而不是傳遞`&foo`。 – 2011-05-21 15:01:31