Categorías: Programacion

Comprobando las fugas de memoria con Valgrind

Una de los errores más comunes cuando realizamos un programa con un lenguaje como C, son las fugas de memoria (memory leaks). Este error aunque parezca menor, tiene una gran importancia porque estamos desperdiciando parte de los recursos de nuestro equipo, dejándolos inaccesibles para todos los programas.

Cómo se produce una fuga de memoria

Una fuga de memoria consiste en reservar memoria dinámica y luego modificar el puntero que apunta a esta zona, dejándola inaccesible.
Por ejemplo en este código hay una fuga de memoria, que se produce al reutilizar el puntero sin liberar antes el bloque de 5 enteros:

#include <stdio.h>
#include <stdlib.h>

int main(){

  int *pt = NULL;
  pt = (int *)malloc(sizeof(int)*5);
  
  //mas codigo ...
  pt = (int *)malloc(sizeof(int)*10);
  free(pt);

}

Cómo comprobar la ausencia de fugas de memoria

Una de las herramientas con las que podemos comprobar las fugas de memoria es Valgrind, si tenemos Ubuntu la podemos instalar con:

sudo apt-get install valgrind

Para comprobar si tenemos fugas de memoria en nuestro código ejecutamos valgrind y pasamos como argumento nuestro ejecutable.

En la imagen vemos que nos indica que hacemos dos allocs (reserva de memoria) y un único free (liberación de memoria), esto ya nos debe hacer sospechar que tenemos una fuga de memoria. Después nos indica que tenemos una fuga de memoria de tamaño 20 bytes que se encuentran en el mismo bloque. Estos 20 bytes son el resultado de 5 enteros (el tipo int tiene en mi sistema un tamaño de 4 bytes).

Como podéis ver es francamente sencillo comprobar si nuestro programa tiene fugas de memoria, con esta herramienta. Por lo que os recomendamos siempre utilizar esta herramienta para comprobar que vuestro programa este libre de este tipo de errores. Quizás alguno de nuestros lectores piense que perder 20 bytes es algo insignificante, pero si por ejemplo el programa fuera un visor de fotos y cargarse cada foto de 10Mb en memoria, ya tendríamos un importante consumo de memoria.

Jorge Durán

Entusiasta de la tecnología desde los 10 años, desarrollador y creador de varios proyectos de software y autodidacta por naturaleza. Ingeniero Informático por la USAL y .Net backend developer en idealista.

Share
Publicado por
Jorge Durán

Recent Posts

Docker: conceptos principales y tutorial paso a paso

Hoy queremos hablaros de Docker un proyecto que cada día es más usado, porque permite…

3 años hace

Crea diagramas rápidamente usando código

Cada vez estamos más acostumbrados a usar código para generar la infraestructura (IaC), documentar nuestro…

3 años hace

Procesamiento del lenguaje natural con ElasticSearch

Uno de los problemas que se presentan con una mayor frecuencia hoy en día, es…

4 años hace

Elige tecnología clásica y aburrida

Uno de los problemas que solemos tener los programadores, es que nos gusta estar a…

4 años hace

Cómo usar Docker en Windows

Docker es una de las herramientas más usadas por los desarrolladores, sin embargo, usarlo en…

4 años hace

Analiza el coste del uso de JavaScript

Como seguramente sabrás el uso de JavaScript ha crecido exponencialmente en los últimos tiempos, sin…

4 años hace