Domanda

Supponiamo che io abbia il seguente codice:

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

Il thread rimosso libererà la memoria allocata da malloc o è qualcosa che ora devo fare?

È stato utile?

Soluzione

No. pthread_create () non ha modo di sapere che il puntatore thread passato ad esso è stato allocato dinamicamente. pthreads non utilizza questo valore internamente; restituisce semplicemente il nuovo ID thread al chiamante. Non è necessario allocare dinamicamente quel valore; puoi invece passare l'indirizzo di una variabile locale:

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

Altri suggerimenti

Devi liberare la memoria da solo. Sarebbe preferibile allocare semplicemente la variabile pthread_t nello stack rispetto all'heap.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top