私はセグメンテーション違反を与えているC/C++コードを持っています。RHLinuxEnterpriseサーバーでgcc/g++を使用してコンパイルされます。実行可能ファイルでValgrindメモリチェッカーを使用しました。
valgrind --tool=memcheck --leak-check=full --show-reachable=yes
これをValgrindの出力メッセージの1つとして受け取ります。
==7053== Invalid read of size 1
==7053== at 0xDBC96C: func1 (file1:4742)
==7053== by 0xDB8769: func2 (file1.c:3478)
==7053== by 0xDB167E: func3 (file1.c:2032)
==7053== by 0xDB0378: func4 (file1.c:1542)
==7053== by 0xDB97D8: func5 (file1.c:3697)
==7053== by 0xDB17A7: func6 (file1.c:2120)
==7053== by 0xDBD55E: func7 (file2.c:271)
==7053== Address 0x1bcaf2f0 is not stack'd, malloc'd or (recently) free'd
私はそれを読んで、私のコードが許可されていない無効なメモリ位置にアクセスしたことを意味します。
私の質問:
どのバッファメモリアクセスが無効であり、上記のどの関数がそれを行っているかを確認するにはどうすればよいですか。
valgrindが無効と言っているアドレス0x1bcaf2f0を使用するにはどうすればよいですか?そのアドレスでシンボル(基本的にはバッファ名)を見つけるにはどうすればよいですか?メモリマップファイル、その他の方法。
Valgrindを使用してメモリ(ヒープ/スタックの破損)エラーを検出するためのその他の一般的なポインタ、valgrindオプション、またはその他のツールはありますか?