valgrind сообщает о несвобожденных блоках - PullRequest
0 голосов
/ 09 августа 2011

Valgrind Сводка файла утечки:

ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
malloc/free: in use at exit: 45,065 bytes in 12 blocks.
malloc/free: 161 allocs, 149 frees, 53,301 bytes allocated.
searching for pointers to 12 not-freed blocks.
checked 583,764 bytes.

Один из этих 12 блоков относится к strdup.Я должен был освободить вещи, выделенные strdup, я согласен.

Мой вопрос, вообще, плохо ли оставлять неосвобожденные блоки?Технически это называется mem-leak ?

Разве они не возвращаются в систему после смерти программы?

Пожалуйста, сообщите.

Редактировать 0: Спасибо за ваши ответы.Как я могу узнать, где находятся эти 12 неосвобожденных блоков?И какая часть кода их генерирует?

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Да, оставлять нераспущенные блоки плохо.Это называется утечка памяти.Если вы позволите, ваша программа в конечном итоге будет использовать всю доступную память в вашей системе.После смерти программы память, выделенная вашей программой, освобождается.

3 голосов
/ 09 августа 2011

Возвращается в систему.

Это технически не утечка памяти, если у вас есть ссылка на память. Чтобы быть утечка памяти вы должны прекратить ссылки на память.

void *str = malloc(10);
str = NULL;

Плохо оставлять нераспущенные блоки в любой точке. Если программа заканчивает его, это может быть не так уж плохо, но это не хорошо для любых будущих изменений, которые вы можете внести (например, извлечь функцию и вызвать ее несколько раз).

Кроме того, избавление от всех утечек памяти облегчит отслеживание с помощью valgrind любого нового (и соответствующего).

...