Múltiples argumentos para funcionar llamados por pthread_create ()?

Necesito pasar múltiples argumentos a una función a la que me gustaría llamar en un hilo separado. He leído que la forma típica de hacerlo es definir una estructura, pasar la función un puntero a eso y desreferenciarlo para los argumentos. Sin embargo, no puedo hacer que esto funcione:

#include  #include  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 */ } 

El resultado para esto debería ser:

 5 7 

Pero cuando lo ejecuto en realidad obtengo:

 141921115 -1947974263 

¿Alguien sabe lo que estoy haciendo mal?

Porque tú dices

struct arg_struct *args = (struct arg_struct *)args;

en lugar de

struct arg_struct *args = arguments;

utilizar

 struct arg_struct *args = (struct arg_struct *)arguments; 

en lugar de

 struct arg_struct *args = (struct arg_struct *)args; 

main() tiene su propio hilo y variables de stack. ya sea asignar memoria para ‘args’ en el montón o hacerlo global:

 struct arg_struct { int arg1; int arg2; }args; //declares args as global out of main() 

Luego, por supuesto, cambie las referencias de args->arg1 a args.arg1 etc.

Utilizar:

 struct arg_struct *args = malloc(sizeof(struct arg_struct)); 

Y pasa estos argumentos de esta manera:

 pthread_create(&tr, NULL, print_the_arguments, (void *)args); 

No te olvides de los args gratis! 😉

Los argumentos de print_the_arguments son argumentos, por lo que debe usar:

 struct arg_struct *args = (struct arg_struct *)arguments.