我有C/C++代碼給出了段錯誤。它在RH Linux Enterprise服務器上使用gcc/g ++進行編譯。我用Valgrind的內存檢查的可執行文件:如何進一步基於Valgrind輸出進行調試
valgrind --tool=memcheck --leak-check=full --show-reachable=yes
我得到這個作爲Valgrind的輸出信息之一:
==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
我讀到意味着我的代碼已訪問一個無效的內存位置,它是不允許的。
我的問題:
如何找出哪個緩衝存儲器存取已經無效,其功能上面做了那個。
如何使用地址0x1bcaf2f0,valgrind所說的無效。我怎樣才能找到該地址的符號(本質上是緩衝區名稱)?內存映射文件,任何其他方式。
使用Valgrind檢測內存(堆/堆棧損壞)錯誤的任何其他常規指針,valgrind選項或其他工具?
謝謝。任何關於如何追蹤上述valgrind輸出中顯示的內存位置「0x1bcaf2f0」的變量的指針? – goldenmean
特別是如果顯示的地址來自動態分配的緩衝區? – goldenmean
什麼幫助堆棧損壞? – xaxxon