Bad address
のライブラリで、readv
のエラーが発生しました。readv:アドレスが間違っています
エラーの原因は何ですか?それは目的地か源ですか? なぜ代わりにsegfault
が表示されないのですか?
Bad address
のライブラリで、readv
のエラーが発生しました。readv:アドレスが間違っています
エラーの原因は何ですか?それは目的地か源ですか? なぜ代わりにsegfault
が表示されないのですか?
Bad Address
はbuf
は、プロセスのアドレス可能メモリ外であることを意味するものとして(read()
エラーコードはreadv()
と同じである)http://linux.die.net/man/2/readが説明EFAULT
のエラー・メッセージです。 readv()
の場合は、iov
のいずれかを意味します(おそらく、セグメンテーションの原因になるのはライブラリのみのためAFAIKです)、おそらくiov_base
-pointersの1つ(これは適切なシステムコールを実装するために渡されますreadv()
)はあなたのアドレス可能なメモリの外にあります。 EFAULT
は、データ交換のために渡されたポインタが無効であることを伝えるカーネルの方法です。
NULL
-pointersを確認したり、似たような、そしてコメンターように述べている:valgrind
は、あなたが問題の原因を診断するのに役立ちます - 場合には、あなたがライブラリとユーザーコードで使用可能なデバッグシンボルを持っています。
は悪いポインタでした - ライブラリは 'ssize_t' ... sighではなく' int'を使ってオフセットを計算しました。 – Anycorn
Valgrindで実行し、デバッグシンボルを準備して、さらに情報を提供します。 – 0xC0000022L