GDBとValgrindを使用しようとしましたが、問題を特定できないようです。 興味深いことに、通常の実行とGDBではプログラムがクラッシュしますが、Valgridではクラッシュしません。 ソケットとUDPを介してサーバーと通信してファイルを転送し、基本的なパケット損失を処理します。コードは次のようになります。 malloc memory corruption、fopen
サーバーのコードは共有されません。なぜなら、問題は存在しないことがわかっているからです。 いくつかを混乱させるかもしれない点は、私は数字ジェネレータを使って自分自身でパケット損失を実装していることです。現在、プログラムで別のrecvfromを使用するだけでなく、実際には何もしません。
クライアントはプログラムの出力を案内するために、クライアントはサーバーにどのファイルが必要かを伝えます。サーバーはクライアントにファイルの送信量を通知し、 )。
出力には、送信されたチャンク、受信された文字の数、および連結された文字列が表示されます。
ファイル転送は、私が問題を引き起こしている受信ファイルを書き込むために使用しているfopen呼び出しだけで成功します。それが私のmallocコールと関係があるかどうかわからない。ここで
は、ソースコードである:ここで
pastebin.com/Z79hvw6L
は、CLIの実行、およびValgrindの出力は(GDBは、任意のより多くの情報を与えていないようです)、次のとおりです。
CLIがmallocメモリ破損エラーを表示し、Valgrindがエラーを返すことに注意してください。
CLI:http://pastebin.com/qdTKMCD2
Valgrindは:任意の助けhttp://pastebin.com/8inRygnU
ありがとう!
は、GDBバックトレースは、エラーがプログラムのどの部分であるために、これは誰かに洞察力を与えることができるかもしれない
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6b961)[0x19a961]
/lib/i386-linux-gnu/libc.so.6(+0x6e15d)[0x19d15d]
/lib/i386-linux-gnu/libc.so.6(__libc_malloc+0x63)[0x19ef53]
/lib/i386-linux-gnu/libc.so.6(+0x5c2b8)[0x18b2b8]
/lib/i386-linux-gnu/libc.so.6(fopen+0x2c)[0x18b38c]
/home/---/client[0x8048dc2]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x145e37]
/home/---/client[0x8048871]
を結果を追加しましたか?
一般的に、投稿の文脈内で関連するソースサブセットを投稿できない場合、多くの回答は得られません。 – Joe
valgrindでクラッシュした場所のバックトレースを投稿してみませんか?私はあなたがそのバックトレースを取得した場合、壊れたメモリ(クラッシュのポイント)にメモリウォッチポイントを設定すると、問題につながると思います。 – dbeer
ジョーってどういう意味ですか?問題はどこにあるのだろうか? – user974703