Para aquellos que les guste programar con memoria dinamica en C, frecuentemente se encontraran en ocasiones tener la sensacion de no haber liberado un apuntador, esto puede ser cuando tambien trabajamos con arreglos (longitud variable) de apuntadores.
Para facilitar esta tarea se pueden programa sus propias implementaciones que lleven un conteo de cuantos apuntadores se han creado y de cuantos se han liberado.
Si al final del programa el resultado es 0, entonces pueden estar tranquilos de que todo se libero correctamente.
Esta sencilla implementacion, solo lleva dicho conteo, NO lleva conteo de memoria utilizada y/o control de cuales apuntadores ya fueron liberados, eso ya es harina de otro costal.
Código
#include<stdlib.h> unsigned int N_ptr = 0; unsigned int test_result() { return N_ptr; } void *test_realloc(void *ptr,size_t size) { void *ptr_new = NULL; if(ptr == NULL && ptr_new != NULL){ N_ptr++; } return ptr_new; } void *test_calloc(size_t nmemb,size_t size) { void *ptr = NULL; if(ptr != NULL) { N_ptr++; } return ptr; } void *test_malloc(size_t size) { void *ptr = NULL; if(ptr != NULL) { N_ptr++; } return ptr; } int test_free(void *ptr) { N_ptr--; }
Se podrian sustituir las funciones malloc, calloc, realloc y free en nuestro programa hacia estas funciones para testear y exclusivamente para prueba. posteriormente volver a dejarlas llamadas originales.
Al final del main despues de liberar todo podremos colocar esta linea
Código:
printf("Valor %i",test_result());
En caso contrareo, deberemos depurar en nuestras subfunciones el antes y el despues de cada llamada para validar en que función esta el problema.
Saludos