Valgrind и утечки памяти - PullRequest
       17

Valgrind и утечки памяти

4 голосов
/ 31 марта 2012

Я немного профилирую память для своего программного обеспечения, и после выполнения стандартной проверки утечки памяти с помощью следующей команды valgrind

valgrind --tool=memcheck --leak-check=full ./path_to_program

я получил следующее резюме:

== 12550 == РЕЗЮМЕ УТЕЧКИ:

== 12550 == определенно потеряно: 597 170 байтов в 7 блоках

== 12550 == косвенно потеряно: 120 байтов в 10 блоках

== 12550 == возможно потеряно: 770 281 байт в 1455 блоках

== 12550 == все еще достижимо: 181 189 байт в 2 319 блоках

== 12550 == подавлено: 0 байт в0 блоков

== 12550 == Доступные блоки (те, на которые был найден указатель) не отображаются.

== 12550 == Чтобы увидеть их, перезапустите с: --leak-check = full --show-достижимый = да

== 12550 ==

== 12550 == Для подсчета обнаруженных и подавленных ошибок, повторно запустите: -v

== 12550 == РЕЗЮМЕ ОШИБОК: 325 ошибок из 325 контекстов (исключено: 176 из 11)

Это не очень хорошо для меня выглядит, поэтому мой вопрос

Почему моя программа не взрывается, если она имеет все эти утечки?

А также в чем разница между:

  • определенно потеряно
  • косвенно потеряно
  • возможно потеряно
  • все еще достижимо

и как я могу попытаться исправить их?

1 Ответ

14 голосов
/ 31 марта 2012

Предлагаю посетить Valgrind FAQ :

В чем разница между детектором утечки памяти Memcheck? «определенно потерян», «косвенно потерян», «возможно, потерян», «все еще достижимый "и" подавленный "?

Подробности в разделе Memcheck руководства пользователя.

Короче говоря:

  • «определенно потерян» означает, что ваша программа утечка памяти - исправить эти Утечки!

  • «косвенно потерян» означает, что ваша программа теряет память в основанная на указателе структура. (Например, если корневой узел двоичного дерева «определенно потерян», все дети будут «косвенно потеряны».) Если вы исправить «точно утраченные» утечки, «косвенно утраченные» утечки должны уйти прочь.

  • «возможно, потерян» означает, что ваша программа утечка памяти, если вы не делать необычные вещи с указателями, которые могут заставить их указывать на середина выделенного блока; см. руководство пользователя для некоторых возможные причины. Используйте --show-possibly-lost=no, если вы не хотите видеть эти отчеты.

  • «все еще достижимо» означает, что ваша программа, вероятно, в порядке - она ​​не была бесплатной немного памяти это могло бы иметь. Это довольно часто и часто разумно. Не используйте --show-reachable=yes, если вы не хотите видеть эти отчеты.

  • «подавлено» означает, что ошибка утечки была подавлена. Есть некоторые подавления в файлах подавления по умолчанию. Вы можете игнорировать подавленные ошибки.

...