2012-04-09 25 views
0

Bad addressのライブラリで、readvのエラーが発生しました。readv:アドレスが間違っています

エラーの原因は何ですか?それは目的地か源ですか? なぜ代わりにsegfaultが表示されないのですか?

+0

Valgrindで実行し、デバッグシンボルを準備して、さらに情報を提供します。 – 0xC0000022L

答えて

3

Bad Addressbufは、プロセスのアドレス可能メモリ外であることを意味するものとして(read()エラーコードはreadv()と同じである)http://linux.die.net/man/2/readが説明EFAULTのエラー・メッセージです。 readv()の場合は、iovのいずれかを意味します(おそらく、セグメンテーションの原因になるのはライブラリのみのためAFAIKです)、おそらくiov_base -pointersの1つ(これは適切なシステムコールを実装するために渡されますreadv())はあなたのアドレス可能なメモリの外にあります。 EFAULTは、データ交換のために渡されたポインタが無効であることを伝えるカーネルの方法です。

NULL -pointersを確認したり、似たような、そしてコメンターように述べている:valgrindは、あなたが問題の原因を診断するのに役立ちます - 場合には、あなたがライブラリとユーザーコードで使用可能なデバッグシンボルを持っています。

+0

は悪いポインタでした - ライブラリは 'ssize_t' ... sighではなく' int'を使ってオフセットを計算しました。 – Anycorn

関連する問題