Foro con Clase C/C++

Como evitar un doble free()

Manu Exposito

Nº de hilos:1

Nº de mensajes:2

jueves, 18 de febrero de 2021


Como puedo saber si un puntero a una estructura ya ha sido liberado con free()?

Tema cerrado

Salvador Pozo

Nº de hilos:0

Nº de mensajes:25

jueves, 18 de febrero de 2021


Hola:

> Como puedo saber si un puntero a una estructura ya ha sido liberado con free()?

No es posible. La referencia de ésta función indica claramente que si el puntero no apunta a un bloque de memoria obtenido mediante malloc, calloc o realloc, su comportamiento no está definido.

Sin embargo, también dice que  si el puntero es nulo, free no hace nada.

Por lo tanto, es una buena práctica asignar NULL a los punteros que no apunten a un bloque de memoria obtenido dinámicamente. Con excepción, claro, de aquellos que usemos para otras tareas.

Hasta pronto.

Tema cerrado

Manu Exposito

Nº de hilos:1

Nº de mensajes:2

jueves, 18 de febrero de 2021


Perfecto.
He hecho lo que me indicas y va como se espera...

Muchísimas gracias.

Hola:

> Como puedo saber si un puntero a una estructura ya ha sido liberado con free()?

No es posible. La referencia de ésta función indica claramente que si el puntero no apunta a un bloque de memoria obtenido mediante malloc, calloc o realloc, su comportamiento no está definido.

Sin embargo, también dice que  si el puntero es nulo, free no hace nada.

Por lo tanto, es una buena práctica asignar NULL a los punteros que no apunten a un bloque de memoria obtenido dinámicamente. Con excepción, claro, de aquellos que usemos para otras tareas.

Hasta pronto.

Tema cerrado