Question

Supposons que j'ai le code suivant:

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

Le thread détaché libérera-t-il la mémoire allouée par malloc, ou est-ce quelque chose que je dois maintenant faire?

Était-ce utile?

La solution

Non. pthread_create () n'a aucun moyen de savoir que le pointeur Thread qui lui a été transmis a été alloué de manière dynamique. pthreads n'utilise pas cette valeur en interne; il renvoie simplement le nouvel identifiant de fil à l'appelant. Vous n'avez pas besoin d'allouer dynamiquement cette valeur; vous pouvez plutôt transmettre l'adresse d'une variable locale:

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

Autres conseils

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 au lieu du tas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top