Uso gratuito dentro del destructor de un objeto liberado con eliminar
-
06-07-2019 - |
Pregunta
Tengo un objeto que estoy liberando con delete, y tiene un char *
que se libera con free en su destructor. La razón por la que estoy usando free es porque usé strdup y malloc
para crear los punteros char
. La razón por la que estoy usando malloc
es porque usé strdup para comenzar en la mayoría de las rutas de código. ¿Causaría este escenario daños en la memoria?
Solución
No, si combina las llamadas correctamente, es decir, free ()
para la memoria asignada con malloc ()
y delete
para la memoria asignada con nuevo
, funcionará bien.
Otros consejos
Lo que estás haciendo es correcto. Una clase que se ha editado con new
se debe desasignar con delete
, pero si posee memoria asignada con malloc
(ya sea directa o indirectamente) entonces debería desasignar esa memoria con free
.
Su implementación es correcta. Utiliza free () para liberar memoria asignada con malloc () (o strdup ()) y esto es exactamente lo que debe hacer.
El requisito es que libere memoria con una primitiva que coincida con la utilizada para asignar esa memoria. Y este requisito se cumple en su implementación.
Descubrí lo que estaba mal. Estaba pasando mi objeto como una copia a través de un método, y mantuvo el char *
; cuando la función salió, ese objeto temporal se eliminó, liberando el char *
. Ahora necesito el char *
después de que salga el método, pero ya no está. Dos *
y menos uno lo arreglaron.