Ich muss mehrere Argumente an eine Funktion übergeben, die ich in einem separaten Thread aufrufen möchte. Ich habe gelesen, dass der typische Weg, dies zu tun, darin besteht, eine Struktur zu definieren, der Funktion einen Zeiger darauf zu übergeben und sie für die Argumente zu dereferenzieren. Ich kann dies jedoch nicht zum Laufen bringen:
#include <stdio.h>
#include <pthread.h>
struct arg_struct {
int arg1;
int arg2;
};
void *print_the_arguments(void *arguments)
{
struct arg_struct *args = (struct arg_struct *)args;
printf("%d\n", args -> arg1);
printf("%d\n", args -> arg2);
pthread_exit(NULL);
return NULL;
}
int main()
{
pthread_t some_thread;
struct arg_struct args;
args.arg1 = 5;
args.arg2 = 7;
if (pthread_create(&some_thread, NULL, &print_the_arguments, (void *)&args) != 0) {
printf("Uh-oh!\n");
return -1;
}
return pthread_join(some_thread, NULL); /* Wait until thread is finished */
}
Die Ausgabe hierfür sollte sein:
5
7
Aber wenn ich es laufen lasse, bekomme ich tatsächlich:
141921115
-1947974263
Weiß jemand was ich falsch mache?