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?
'f-> msg [0] = '\ 0';' est complètement inutile dans votre code –
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