Все еще достижим в Вальгринде - PullRequest
6 голосов
/ 10 декабря 2010

В поисках того, что еще можно достичь в Вальгринде, некоторые люди говорят, что это не проблема. нам не нужно это исправить. Некоторые люди говорят, что это нужно исправить. Было бы лучше, если бы кто-то объяснил мне явно, что за логика все еще достижима. Это обязательно исправить?

[EDIT]

У меня есть следующий вывод valgrind для моей программы на C. Мне нужно это исправить?

      LEAK SUMMARY:
      ==27333==    definitely lost: 0 bytes in 0 blocks.
      ==27333==      possibly lost: 0 bytes in 0 blocks.
      ==27333==    still reachable: 96 bytes in 12 blocks.
      ==27333==         suppressed: 0 bytes in 0 blocks.

1 Ответ

9 голосов
/ 10 декабря 2010

Это зависит. «Все еще достижимо» означает, что вы не освободили блок памяти перед выходом, но указали на него.

В программе на C ++ это означает, что некоторый объект мог не быть delete d, и, следовательно, его деструктор, возможно, не был запущен и, таким образом, говорят, что некоторые данные, возможно, не были сохранены на диск, например, а некоторые другие действия могут не и ваша программа может вызвать непредвиденное поведение.

Однако в программах на C нет деструкторов, поэтому ваша программа просто не может зависеть от этого. Кроме того, освобождение памяти занимает некоторое время, поэтому, не освобождая память при выходе, вы можете сэкономить некоторое время - ваша программа выйдет быстрее (это может быть важно для программ с большим количеством данных).

Итак, IMO, если ваша C-программа имеет «все еще доступные» блоки, это не проблема, но это указывает на то, что некоторый код в программе не освобождает память, и поэтому вы можете ожидать ошибок при повторном использовании этого кода.

...