[C con Clase] mal uso del metodo free()
Steven R. Davidson
vze266ft en verizon.net
Mar Feb 12 04:19:20 CET 2008
Hola ERVA,
ERVA wrote:
> Hola gente.
>
> Tengo un problema al momento de liberar memoria, espero me puedan ayudar.
>
> He creado una estructura con los siguientes datos:
>
> *****
> typedef struct dataS {
> unsigned char * d;
> unsigned int l;
> } DATA
>
> *******
>
> Ahora en el main:
>
> DATA dato1;
> DATA dato2;
>
> dato1.d = NULL;
> dato1.l = 0;
>
> dato2.d = NULL;
> dato2.l = 0;
>
> /*Operaciones y asigno valores a dato1 y dato2*/
>
> if(dato1.d)
> free(dato1.d);
> dato1.d = NULL;
> dato1.l = 0;
>
> if(dato2.d)
> free(dato2.d);
> dato2.d = NULL;
> dato2.l = 0;
>
> ***************
>
> El problema es cuando intenta liberar dato2.d, me muestra un mensaje
> con la leyenda:
>
> "Acccess violation address"
>
> Caray! la mera verdad me trae loco... sino es que ya estoy :)
>
> Bueno espero haberme explicado. Reciban un saludo y gracias por la
> ayuda.
>
Si estás usando C, sugiero comprobar los punteros explícitamente con el
valor de 'NULL'. Esto es,
if( NULL != dato1.d )
free( dato1.d );
if( NULL != dato2.d )
free( dato2.d );
De todas maneras, comprueba que 'dato2.d' contiene una dirección válida
de memoria. Es posible que 'dato2.d' fuera liberada previamente. Liberar
una dirección de memoria a través de 'free()' que anteriormente fuese
liberada por 'free()' o implícitamente por 'realloc()' puede provocar
errores.
Espero que esto te oriente.
Steven
Más información sobre la lista de distribución Cconclase