Всего петля и 33 утечки - PullRequest
       5

Всего петля и 33 утечки

5 голосов
/ 18 декабря 2011

Выглядит что-то странное на моем Mac:

$> cat main.c
#include <stdio.h>   
int main(int ac, char **av) {
    for (int i = 0; i < ac; i++)
        printf("%s\n", av[i]);
    return 0;
}
$> gcc main.c -std=c99
$> valgrind ./a.out hello my friends

А вот и результат:

==725== Memcheck, a memory error detector
==725== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==725== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==725== Command: ./a.out hello my friends
==725== 
--725-- ./a.out:
--725-- dSYM directory is missing; consider using --dsymutil=yes
./a.out
hello
my
friends
==725== 
==725== HEAP SUMMARY:
==725==     in use at exit: 6,146 bytes in 33 blocks
==725==   total heap usage: 33 allocs, 0 frees, 6,146 bytes allocated
==725== 
==725== LEAK SUMMARY:
==725==    definitely lost: 0 bytes in 0 blocks
==725==    indirectly lost: 0 bytes in 0 blocks
==725==      possibly lost: 0 bytes in 0 blocks
==725==    still reachable: 6,146 bytes in 33 blocks
==725==         suppressed: 0 bytes in 0 blocks
==725== Rerun with --leak-check=full to see details of leaked memory
==725== 
==725== For counts of detected and suppressed errors, rerun with: -v
==725== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 1 from 1)

Если кто-то знает почему и может объяснить мне, откуда происходят утечки, я был бы благодарен !!

Хорошего дня: -)

Ответы [ 2 ]

9 голосов
/ 18 декабря 2011

Это не утечки.Объекты, перечисленные как still reachable, не должны вас беспокоить.Если в приведенных выше строках у вас будет ненулевое значение, тогда оно должно подать сигнал тревоги!

Эти 33 блока, перечисленные как still reachable, скорее всего, являются некоторыми блоками, выделенными внутри вызовов printf вашимстандартная библиотека.Не о чем беспокоиться.

Подумайте о том, чтобы взглянуть на этот ответ на аналогичный вопрос.

3 голосов
/ 18 декабря 2011

"still reachable" когда программа завершена, на самом деле беспокоиться не о чем.

"still reachable" означает, что есть выделенная память, которая не была освобождена, но все еще есть указатели, указывающие на эту память.Поэтому valgrind не помечает это как истинную «утечку» памяти.

Зачастую тратить свободное время - пустая трата времени: при выделении выделенной памяти до завершения приложения выделенная память возвращается в ОС.во всяком случае, так как приложение заканчивается.

...