Noções básicas de Valgrind
Detecte vazamentos e erros
Noções básicas de Valgrind é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
O que é Valgrind?
Valgrind é uma estrutura de instrumentação. Sua ferramenta padrão, o Memcheck, detecta vazamentos e erros de memória sem recompilar, executando o programa em uma CPU sintética.
Executando o Memcheck
Invoque o Valgrind antes do seu programa. Compile primeiro com -g para obter os números das linhas.
g++ -g main.cpp -o app
valgrind --leak-check=full ./appDetectando vazamentos
O Memcheck relata a memória que ainda está alocada ao sair do programa, classificando-a como definitivamente perdida, indiretamente perdida ou ainda alcançável.
#include <cstdlib>
int main() {
int* p = (int*)malloc(40); // never freed -> definitely lost
return 0;
}Categorias de vazamentos
Entenda as categorias do relatório.
- Definitivamente perdida: não resta nenhum ponteiro; é um vazamento real
- Indiretamente perdida: só é alcançável por meio de um bloco perdido
- Ainda alcançável: existe um ponteiro ao sair do programa (geralmente inofensivo)
Leituras e gravações inválidas
O Memcheck sinaliza acessos a memória não alocada ou liberada, informando o endereço e o tamanho.
#include <cstdlib>
int main() {
int* a = (int*)malloc(2 * sizeof(int));
a[5] = 1; // invalid write past the block
free(a);
return 0;
}Valores não inicializados
O Memcheck avisa quando uma condição ou saída depende de um valor não inicializado, uma fonte comum de erros não determinísticos.
#include <iostream>
int main() {
int x; // uninitialized
if (x == 42) // use of uninitialized value
std::cout << "hi\n";
return 0;
}Lendo a saída
Cada bloco de erro mostra a operação, o rastreamento da pilha que contém o erro e, para blocos da memória dinâmica, onde a memória foi alocada. O HEAP SUMMARY totaliza as alocações e os vazamentos.
Opções úteis
Opções comuns:
--leak-check=full: detalha cada vazamento--show-leak-kinds=all--track-origins=yes: rastreia os valores não inicializados até sua origem--error-exitcode=1: faz a CI falhar em caso de erros
Valgrind versus ASan
Ambos encontram erros de memória, mas apresentam diferentes compromissos.
- Valgrind: não precisa de recompilação, é mais lento (10 a 50 vezes) e detecta bem leituras não inicializadas
- ASan: precisa de recompilação, é muito mais rápido e detecta melhor estouros da pilha
Suprimindo problemas conhecidos
Bibliotecas de terceiros podem produzir ruído. Gere e aplique um arquivo de supressões com --gen-suppressions=all e --suppressions=file para silenciar relatórios conhecidos e inofensivos.
Quando usar o Valgrind
Use o Valgrind quando não puder recompilar com sanitizadores, precisar rastrear valores não inicializados com precisão ou quiser uma segunda opinião. Caso contrário, o ASan geralmente é mais rápido para a CI rotineira.
Verificação rápida
Relembre as categorias de vazamentos.
Recapitulação
Você aprendeu o básico do Valgrind.
- O Memcheck encontra vazamentos, acessos inválidos e leituras não inicializadas sem exigir recompilação
- Execute com
--leak-check=full --track-origins=yes - Tipos de vazamento: definitivamente/indiretamente perdida, ainda alcançável
- Mais lento que o ASan, mas excelente para erros causados por valores não inicializados
Aprenda C++ com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 51
- Aulas
- 203
Perguntas Frequentes
A aula “Noções básicas de Valgrind” é grátis?
Sim — o texto completo de “Noções básicas de Valgrind” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Noções básicas de Valgrind”?
Detecte vazamentos e erros Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Noções básicas de Valgrind”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Uso de gdb e lldb
- AddressSanitizer
- UBSan e TSan
- Noções básicas de Valgrind