• ベストアンサー

pthread_attr_tへの値の代入について

スレッドを作成する際に、 属性としてPTHREAD_CREATE_DETACHEDを指定したいのですが、 その際pthread_attr_tをどのように設定したらよいかわかりません。 現在書いているコードは pthread pt; pthread_attr_t* attr; pthread_attr_init(attr); pthread_attr_setdetachstate(attr,PTHREAD_CREATE_DETACHED); if (pthread_create(&pt,attr,NULL,NULL) != 0){ perror("thread_create()"); exit(1); } 上記のようなものです。(スレッド作成部分のattr以外の 引数は適当です) これでコンパイルすると 警告: 変数 attr には値が代入されていません. と、警告が出てしまいます。 これを解消するにはどう修正したらよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.1

以下のようにしてください。 --------------------------- pthread pt; pthread_attr_t attr; // *をとる pthread_attr_init(&attr); // &を付加 pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED); // &を付加 if (pthread_create(&pt,&attr,NULL,NULL) != 0){ //&を付加 perror("thread_create()"); exit(1); }

ponshige
質問者

お礼

ありがとうございます。 無事解決しました。

その他の回答 (1)

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.2

とりあえず > pthread_attr_t* attr; > pthread_attr_init(attr); は < pthread_attr_t attr; < pthread_attr_init(&attr); ですね。後の行も対応するように変更します。 pthread_attr_initは引数で指定した領域に書込みしますので割当て済みの領域を渡さなければいけません。

ponshige
質問者

お礼

ありがとうございます。 理由まで教えていただき、よくわかりました。 答えていただいたお二方に 20ptずつ入れたいところですが、、 タッチの差ということでrinkun様には 10pt入れさせていただきます。

関連するQ&A