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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top