Ich versuche, die Zeiger auf pthread_create
NULL übergeben, um herauszufinden, ob und befreit bereits worden sind. Jedoch in dem unten stehenden Code enthält idx
noch die Speicheradresse, das heißt, $1 = (int *) 0x601010
fest, ob Argument in pthread_create von Haupt-Thread in C NULL ist
Gibt es eine Möglichkeit, wenn idx
zu bestimmen, wurde befreit und ist NULL? Denken Sie daran,
#include <pthread.h>
void *foo(void *i) {
int a = *((int *) i);
free(i);
i = NULL;
}
int main() {
pthread_t thread;
int *idx = malloc(sizeof(*idx));
pthread_create(&thread, 0, foo, (void *) idx);
pthread_detach(thread);
sleep(10);
// if (idx == NULL) // contains (int *) 0x601010
// puts("done");
return 0;
}
Statt 'pthread_detach', könnten Sie' pthread_join'. Wenn der Join zurückgegeben wird, können Sie sicher sein, dass der Speicher freigegeben ist. – user3386109
'idx' ist eine lokale Variable und Sie übergeben ihren Wert. Es gibt also keine Möglichkeit, dass 'foo' seinen Wert ändern könnte, selbst wenn es gewünscht wäre. Sie initialisieren auch niemals den Speicher, auf den 'idx' zeigt, also hat 'a = * (int *) (i) 'in' foo' ein nicht spezifiziertes Verhalten. – rici
@ user3386109 Danke, werde ich schauen Sie in 'pthread_join', aber ich war neugierig, ob es möglich war, noch pthread_detach verwenden. – user1024718