Última actualización:2026-10-12
Detección de fugas de memoria en C++¶
C++那些事: cómo detectar problemas de memoria¶
Al escribir código C/C++ los problemas de memoria están en todas partes; tanto en el trabajo como en las entrevistas, el tema de la memoria está siempre presente.
Hoy usamos un ejemplo para aprender paso a paso a detectar memoria en C++ con valgrind.
Simulamos tres problemas:
- Detección de problemas de liberación de memoria
- Detección de desbordamiento de escritura
- Detección de desbordamiento de lectura
Aprenderás:
- Cómo detectar estos tres problemas
- Cómo depurar con gdb + valgrind a la vez
Bienvenido a la discusión.
1. Introducción del ejemplo¶
Mira el código siguiente: descubriremos que tiene muchos problemas:
- strcpy no es seguro: sea cual sea el tamaño de la memoria, podría desbordarse
- Al hacer print, msg accede fuera de rango
- El destructor no libera la memoria
¿No se parece muchísimo al código que tú mismo escribiste alguna vez, jaja?
En esta sección vamos a detectar estos 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¶
Instalación de valgrind:
Para la instalación en más sistemas, consulta la dirección oficial:
3. Uso¶
Al compilar, se recomienda usar debug, -g, para así poder detectar en qué línea está el problema.
Después ejecutamos:
Y obtenemos la información que nos da valgrind:

En ella podemos ver varios problemas:
- Invalid write
Ocurre en val_test.cc::11
- Invalid read
Ocurre en val_test.cc:10
- Fuga de memoria
1 allocs, 0 frees, 3 bytes allocated.
Esta información nos permite localizar rápidamente qué línea de código tiene el problema.
4. Depuración con gdb¶
Si le añadimos --vgdb-error=0, podemos depurar el código con mucha comodidad, depurando mientras vemos dónde está el problema.

A continuación entramos con gdb
Pegamos en gdb la línea target anterior y luego continue; así veremos el código de la línea correspondiente junto con la información que valgrind sigue emitiendo.


En esta sección hemos practicado con problemas de memoria; si te ha servido de ayuda, te invito a reenviarlo.