У меня есть код C/C++, который дает segfault. Он скомпилирован с использованием gcc/g ++ на сервере RH Linux Enterprise. Я использовал проверку памяти 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 для обнаружения ошибок памяти (кучи/стека)?
Спасибо. Любые указатели на то, как я могу отслеживать переменную в ячейке памяти '0x1bcaf2f0', которая показана в выводе valgrind выше? – goldenmean
Особенно, если указанный адрес поступает из динамически распределенных буферов? – goldenmean
Что помогает при повреждении стека? – xaxxon