Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 6 Diciembre 2018, 18:51 pm



Título: liberar memoria(Resuelto)
Publicado por: Beginner Web en 6 Diciembre 2018, 18:51 pm
Resuleto!
Código
  1. //Definicion de la estructura lista
  2. typedef struct tnodo *pnodo;
  3. typedef struct tnodo{
  4. char dato;
  5. pnodo sig;
  6. };
  7. typedef struct tlista{
  8. pnodo inicio;
  9. pnodo final;
  10. };
  11.  
  12. void liberar_memoria(tlista &lista)
  13. {
  14. pnodo eliminado;
  15. while(lista.inicio!=NULL){
  16. eliminado=lista.inicio;
  17. lista.inicio=eliminado->sig;
  18. eliminado->sig=NULL;
  19. delete(eliminado);
  20. }
  21. }
;-)


Título: Re: liberar memoria
Publicado por: CalgaryCorpus en 6 Diciembre 2018, 19:18 pm
Depende de lo que entiendas por "liberar".
Nada impide que los punteros apuntes a direcciones de memoria asignadas o no. El que tengas un puntero a zona de memoria liberada no la hace estar asignada, solo se convierte en un peligro para la ejecucion de tu programa el que alguna instruccion posterior, haciendo uso de ese puntero no actualizado quiera ir a esa direccion de memoria y leer o escribir alli.

En resumen:
Si "liberar" incluye mantener el estado de la lista, entonces es necesario la asignacion del puntero final. Si "liberar" solo se preocupa de memoria utilizada, no es necesario.