¿He liberado todos los apuntadores?

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.


Codigo:

#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;
    ptr_new = realloc(ptr,size);
    if(ptr == NULL && ptr_new != NULL){
        N_ptr++;
    }
    return ptr_new;
}

void *test_calloc(size_t nmemb,size_t size)    {
    void *ptr = NULL;
    ptr = calloc(nmemb,size);
    if(ptr != NULL)    {
        N_ptr++;
    }
    return ptr;   
}

void *test_malloc(size_t size)    {
    void *ptr = NULL;
    ptr = malloc(size);
    if(ptr != NULL)    {
        N_ptr++;
    }
    return ptr;   
}

int test_free(void *ptr)    {
    N_ptr--;
    free(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());

Si en nuestra salida del progrma el resultado es 0, significa que todo esta bien.

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

Comentarios

Entradas populares de este blog

Clave WPA2 por Defecto de equipos TotalPlay (Huawei HG8245H)

Cable modem Ubee - WPA2 y WPS por defecto