Última atualização:2026-10-12
Detecção de Vazamentos de Memória em C++¶
C++那些事: como detectar problemas de memória¶
Ao escrever código C/C++, problemas de memória estão por toda parte; seja no trabalho ou em entrevistas, o tema memória está sempre presente.
Hoje usaremos um exemplo para aprender passo a passo a detectar memória em C++ com o valgrind.
Simulamos três problemas:
- detecção de liberação de memória
- detecção de estouro de escrita
- detecção de estouro de leitura
Você aprenderá:
- como detectar esses três problemas
- como usar gdb + valgrind juntos para depurar
Fique à vontade para discutir.
1.Exemplo de introdução¶
Olhe o código abaixo; perceberemos muitos problemas:
- strcpy não é seguro: qual o tamanho adequado de memória? pode ultrapassar limites
- acesso fora dos limites de msg no print
- o destruidor não libera a memória
Parece muito aquele código que você mesmo já escreveu, haha.
Esta seção detectará esses problemas.
class Message {
private:
char *msg;
public:
Message(const char *text) {
msg = new char[3];
std::strcpy(msg, text);
}
void printOutOfRange() {
std::cout << msg[5] << std::endl;
}
~Message() {
}
};
int main() {
Message message("hello");
message.printOutOfRange();
return 0;
}
2.valgrind¶
Instalação do valgrind:
Para outros sistemas, consulte o endereço oficial:
3.Uso¶
Ao compilar, recomenda-se usar debug, -g, para que seja possível detectar em qual linha está o problema.
Em seguida executamos:
Obtemos então as informações que o valgrind nos fornece:

Neste ponto podemos ver vários problemas:
- Invalid write
ocorre em val_test.cc::11
- Invalid read
ocorre em val_test.cc:10
- vazamento de memória
1 allocs, 0 frees, 3 bytes allocated.
Essas informações permitem localizar rapidamente qual linha do código tem problema.
4.Depuração com gdb¶
Ao adicionarmos --vgdb-error=0, podemos depurar o código com facilidade, depurando e ao mesmo tempo vendo onde está o problema.

Em seguida, anexamos o gdb
Cole no gdb a linha "target" acima e continue; poderemos ver o código da linha correspondente, e o valgrind continuará emitindo informações.


Esta seção trouxe uma prática de problemas de memória; se ajudou você, compartilhe.