MacApp in quel caso si, ma dopo alla funzione pthread_create(...) devo passare un void * che poi ridiventare param * come mi ha fatto vedere oregon

Purtroppo ora è insorto un altro problema.

arg_ascolto->fdserver = fdg = 3
codice:
param *arg_ascolto = (param *)malloc(sizeof(param));
   
   arg_ascolto->fdserver = fdgioco;
   arg_ascolto->thread_id = (int *)tid; //---->>> verficare
    
   pthread_t *tid_ascolto = crea_tid(1);
   if( ( err = pthread_create(&tid_ascolto[0],NULL,ascolto,&arg_ascolto) ) != 0 )
   {  printf("errore %s\n",strerror(err));   exit(1);  }
nella funzione ascolta dopo aver fatto il cast:
codice:
   param *arg = (param *)x;
   int fdg = arg->fdserver;
   pthread_t *tid = (pthread_t *)arg->thread_id;
fdg = arg->fdserver = 13452040

Cosa succede? in cosa sbaglio?
Grazie ancora dell'aiuto