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()?
Salvador Pozo
Nº de hilos:0
Nº de mensajes:25
jueves, 18 de febrero de 2021
Hola:
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.
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:
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.