Якщо ви скомпілюєте свою програму з прапорцем -g, Valgrind покаже вам назви функцій і номери рядків, де виникають помилки. Іноді фактична помилка виникає в іншому рядку (зокрема, для помилок неініціалізованого значення), але номер рядка, який повідомляє вам Valgrind, є хорошою відправною точкою.
Memcheck – це детектор помилок пам'яті. Він може виявити наведені нижче проблеми, які часто зустрічаються в програмах C і C++. Немає доступу до пам’яті, напр. переповнення та недоповнення блоків купи, переповнення верхньої частини стека та доступ до пам’яті після її звільнення.
2.5. 2 Використання Valgrind для виявлення помилок доступу до пам’яті та витоків
- Скомпілюйте код із прапорцем -g, наприклад: $ gcc -g -O1 test.c. …
- Використовуйте valgrind як оболонку для запуску двійкового файлу та виконайте стрес-тестування: $ valgrind –leak-check=yes –log-file=valgrind.rpt a.out.
Інтерпретація результату valgrind Підсумок купи повідомляє вам про кількість байтів, які використовуються під час завершення програми, кількість виділень пам’яті (щоразу, коли використовується оператор new), кількість звільнень (щоразу, коли використовуються оператори delete або delete [] ), і загальна кількість виділених байтів.
Основними інструментами для виявлення витоків пам'яті є функції налагоджувача C/C++ і купи налагодження CRT. Оператор #define відображає базову версію функцій купи CRT на відповідну версію налагодження. Якщо ви пропустите оператор #define, дамп витоку пам’яті буде менш детальним.
Якщо ви скомпілюєте свою програму з прапорцем -g, Valgrind покаже вам назви функцій і номери рядків, де виникають помилки. Іноді фактична помилка виникає в іншому рядку (зокрема, для помилок неініціалізованого значення), але номер рядка, який повідомляє вам Valgrind, є хорошою відправною точкою.