2008-09-25 8 views
3

Supposons que j'ai le code suivant:Est-ce que pthread_detach va gérer ma mémoire pour moi?

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

Est-ce que le fil détaché libérer la mémoire allouée par malloc, ou est-ce quelque chose que je dois maintenant faire?

Répondre

10

No. pthread_create() n'a aucun moyen de savoir que le pointeur de fil qui lui est passé a été allouée dynamiquement. pthreads n'utilise pas cette valeur en interne; il renvoie simplement le nouvel identifiant de thread à l'appelant. Vous n'avez pas besoin d'allouer dynamiquement cette valeur; vous pouvez passer l'adresse d'une variable locale à la place:

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

Vous devez libérer la mémoire vous-même. Il serait préférable d'allouer simplement la variable pthread_t sur la pile par opposition au tas.

+0

Le problème d'OP est de penser que parce que 'pthread_create' prend un argument' pthread_t', vous avez besoin d'une variable pointeur pour passer. C'est une erreur classique de commencer les programmeurs C - déclarant des variables de pointeur à utiliser comme arguments plutôt que de passer '& foo'. –

Questions connexes