2011-06-19 5 views
2

Dans le code ci-dessous, lorsque j'imprime f->msg dans la fonction principale, les données s'impriment correctement. Cependant, si je passe le mystruct * f dans pthread_create et essaye d'imprimer la valeur de msg, j'obtiens une faute de segmentation sur la deuxième ligne de la fonction receive_data.Problème lors du passage de struct pointer par pthread_create

typedef struct _mystruct{ 
    char *msg; 
} mystruct; 

void *receive_data(void* vptr){ 
    mystruct *f = (mystruct*)vptr; 
    printf("string is %s\n",mystruct->msg); 
    return NULL; 
} 

int main(){ 
    mystruct *f = malloc(sizeof(mystruct)); 
    f->msg = malloc(1000); 
    f->msg[0] = '\0'; 
    strcpy(f->msg,"Hello World"); 
    pthread_t worker; 
    printf("[%s]\n",f->msg); 
    // attr initialization is not shown 
    pthread_create(&worker,&attr,receive_data,&f); 
} 

Un autre code d'initialisation pour pthread n'est pas affiché.

Comment puis-je résoudre ce problème?

+0

'f-> msg [0] = '\ 0';' est complètement inutile dans votre code –

+0

Oui, je vois que, dans le code actuel, je fais strcat au lieu de strcpy qui doit localiser '\ 0 '. Mais, c'était mon erreur dans ce contexte. – user482594

Répondre

7

Vous passez un pointeur vers mystruct. Ne fais pas ça.

pthread_create(&worker, &attr, receive_data, f); 

est suffisant. f est déjà de type mystruct*. &f est de type mystruct**.

+2

Le programme OP se termine presque sûrement avant d'avoir la possibilité d'imprimer quoi que ce soit car il se termine à la fin de 'main' ... –

Questions connexes