2011-06-19 4 views
2

以下のコードで、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の初期化コードは表示されません。

この問題を解決するにはどうすればよいですか?

+0

'f-> msg [0] = '\ 0';'あなたのコードではまったく役に立たない –

+0

実際のコードでは、strcpyの代わりにstrcatを実行します。 0 'である。しかし、それは私の間違いでした。 – user482594

答えて

7

ポインタへのポインタをmystructに渡しています。それをしないでください。

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

で十分です。 fはすでにmystruct*です。 &fのタイプはmystruct**です。

+2

OPのプログラムは、 'main'の終わりから何かを印刷する機会がある前にほぼ確実に終了します... –

関連する問題