以下のコードで、f->msg
をmain関数に出力すると、データが正しく出力されます。しかし、pthread_create
にmystruct * fを渡してmsg値を出力しようとすると、receive_data
関数の2行目にセグメント化エラーが発生します。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);
}
その他のpthreadの初期化コードは表示されません。
この問題を解決するにはどうすればよいですか?
'f-> msg [0] = '\ 0';'あなたのコードではまったく役に立たない –
実際のコードでは、strcpyの代わりにstrcatを実行します。 0 'である。しかし、それは私の間違いでした。 – user482594