2009-06-02 8 views
4

に私は、セグメンテーションフォールトを取得しています私はそれを引き起こしている可能性があるかわからないんだけど。コンストラクタで_mutexを初期化しましたセグメンテーションフォールトはpthread_mutex_lockの

pthread_mutex_init(&_mutex,NULL). 

何かできますか?

+1

複数のコードを投稿してください。問題はまったく違っていて、pthread_mutex_lock呼び出しの中に浮かぶ可能性が非常に高いです。 – lothar

+0

あなたが提供した情報を手助けするのは不可能です。教育された推測以外は何も得られません。 –

+0

私は教育上の推測を望んでいました。「main()でグローバル初期化関数を呼び出す必要があります。それはちょっとばかげたことだ。まあ、セグフォルト、あなたは何を期待しますか? – Nefzen

答えて

5

これを解決し、私はこれを非常に悩ます。 Pthreadが実行する関数の引数としてProducer *を送信したいので、&(* iter)を使用しました。ここでiterはプロデューサベクトルで実行されるイテレータです。

ベクトル(正当な)<プロデューサ*>であり、私は未定義の結果を生成したProducer *を送信していたことに気付きました。 grrrrr。明らかに、私はPthreadsが純粋なC言語であり、そのためにvoid型を使用しているので、これは気付かなかった。これは、あらゆる型の引数を受け入れる唯一の方法だからだ。

+0

私はミューテックスロックでsegfaultを取得していた理由を理解しようと時間を費やさなければならないと思っていましたが、これは私が見つけた最初の投稿でしたが、私はあなたと同じ事をやっていました! – iedoc

2

デバッガを添付し、正確にを見つけてください。いくつかのポインタがランダム性または初期化されていない領域を指し示している可能性があります。

valgrindさんのmemcheckを実行し、その内容を確認してください。

以下のコメントに応答して、編集

、のpthread APIの使用は、どこか間違って聞こえます。私はO'Reillyの「PThread Programming」を参考にすることを勧めました。それは私が行っているものです:)私はAPIの使用がpthread_mutex_t構造体の内部のポインタをどこか危険なものにしているため、これを推測しました。これはAPIの正しい使い方では起こりません。

+0

私は望むが、Eclipseは協力しないことを選択し、デバッグは現時点では機能していない。x – Nefzen

+0

あなたはしなければならない。 pthread APIのバグになることはまずありません。ちょうどあなたのコードを残してください:S :) –

+0

私はそう思います。 さて、Eclipseのバグを解決することができたので、私は今私がしなければならないデバッグを考えることができるほど満足しています。 – Nefzen

関連する問題