Como fazer depuração de vazamento de memoria?
Embora a linguagem tenha coleta de lixo (garbage collection) para gerenciar a memória automaticamente. O garbage collector (GC) limpa objetos que não estão mais em uso, mas há situações onde os desenvolvedores podem criar condições que causam vazamento de memória.E de lembrar que nem toda a linguagem tem o garbage collector (GC).
Apresento-vos o Valgrind
é uma ferramenta de depuração que ajuda a detectar erros de memória.
O Valgrind é utilizado na linha de comando. Para instalá-lo em distribuições Linux, basta usar o gerenciador de pacotes. Por exemplo:
sudo apt-get install valgrind # Debian/Ubuntu
Executando um programa com Valgrind:
Para rodar um programa com Valgrind e detectar vazamentos de memória, o comando básico é:
valgrind --leak-check=full ./example
Interpretação da saída:
Valgrind gera um relatório detalhado com a quantidade de memória alocada, liberada, e vazada, além de fornecer o local no código onde os problemas ocorrem. Exemplo de uma saída simplificada:
- ==12345== HEAP SUMMARY:
- ==12345== in use at exit: 8 bytes in 1 blocks
- ==12345== total heap usage: 5 allocs, 4 frees, 72 bytes allocated
- ==12345==
- ==12345== 8 bytes in 1 blocks are definitely lost in loss record 1 of 1
- ==12345== at 0x4C2BBAF: malloc (vg_replace_malloc.c:299)
- ==12345== by 0x4005ED: main (example.c:6)
Esse exemplo indica que 8 bytes de memória foram perdidos, e aponta para a linha no código onde a memória foi alocada (example.c:6).