現在Mac OS X El Capitan、gcc バージョン4.2.1の環境で、
マルチスレッド・プログラミングの作成をC言語で行っているのですが、
ヘッダファイルで
C
1(1) typedef struct _ThreadParamter { 2 struct in_addr c_ipaddr; //IPアドレス 3 in_port_t c_port; //ポート番号 4 int soc; //コネクション用ソケットディスクリプタ 5 PGconn *con; //PGconnオブジェクト(データベース) 6}ThreadParameter;
という構造体を作ったのち、別のソースファイルで
C
1 (2) pthread_create(&worker, NULL, (void *)controller, (void *)threadParam); 2
と関数を呼び出してcontroller関数に構造体のthreadParamを引数として渡してスレッドを開始しようとしているのですが、そのcontroller関数を含んだ別ソースファイルで、
C
1 (3) ThreadParameter *threadParam = (ThreadParameter *)__arg; //スレッド引数構造体 2
というふうに同じThreadParameter型の変数threadParamで、
(ThreadParameter *)__arg、つまり(2)に書いている関数pthread_createの第4引数である(void *)threadParamを受け取ろうとすると、
C
1Segmentation fault: 11 2
とエラーが返ってきてしまいます。
同じ型なので問題ないように感じるのですが、何がいけないのでしょうか?
できれば、加えてその対策も教えていただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/18 10:29