Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DanielPy en 26 Junio 2015, 22:01 pm



Título: Liberar memoria en listas simplemente enlazada [C]
Publicado por: DanielPy en 26 Junio 2015, 22:01 pm
Hola gente.
Los molesto porque estoy estudiando listas simples enlazadas, créanme que nunca un tema de c me cuesta tanto entenderlo, el caso es que encontré un video con este código y me pareció sencillo para ver si de una vez por todas  entiendo estas venditas listas.-
La pregunta es ¿debo liberar memoria reservada con malloc?.-

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct{
  5. struct nodo* siguiente;
  6. char* nombre;
  7. } nodo;
  8.  
  9. nodo* primer = NULL;
  10. nodo* ultimo = NULL;
  11.  
  12. void agregar(nodo* _nodo){
  13. _nodo -> siguiente = NULL;
  14. if(primer == NULL){
  15. primer = _nodo;
  16. ultimo = _nodo;
  17. }else{
  18. ultimo -> siguiente = _nodo;
  19. ultimo = _nodo;
  20. }
  21. }
  22.  
  23. int main(){
  24. nodo* primerNodo = malloc(sizeof(nodo));
  25. primerNodo -> nombre = "Primer Elemento";
  26. nodo* segundoNodo = malloc(sizeof(nodo));
  27. segundoNodo -> nombre = "Segundo Elemento";
  28. nodo* tercerNodo = malloc(sizeof(nodo));
  29. tercerNodo -> nombre = "Tercer Elemento";
  30.  
  31. agregar(primerNodo);
  32. agregar(segundoNodo);
  33. agregar(tercerNodo);
  34. nodo* i = primerNodo;
  35. while(i != NULL){
  36. printf("%s\n", i -> nombre);
  37. i = i -> siguiente;
  38. }
  39. return 0;
  40. }


Desde ya muchas gracias.-

Saludos.
Daniel


Título: Re: Liberar memoria en listas simplemente enlazada [C]
Publicado por: ivancea96 en 26 Junio 2015, 22:05 pm
Evidentemente. Sinó la memoria quedará estorbando y gastando espacio. Cada vez que borras un nodo, libera la memoria.

Si hablas de hacerlo al finalizar el programa, no tiene tanta importancia. Pero es preferible liberar.


Título: Re: Liberar memoria en listas simplemente enlazada [C]
Publicado por: DanielPy en 26 Junio 2015, 23:10 pm
¿Debo suponer que si no la libera el programa el compilador lo realiza igual al cerrarse el programa?.-

Saludos.
Daniel


Título: Re: Liberar memoria en listas simplemente enlazada [C]
Publicado por: ivancea96 en 26 Junio 2015, 23:22 pm
El compilador solo compila, no hace nada en tiempo de ejecución.

El sistema operativo será el que se encargue de liberar la memoria cuando el programa cierre.

Pero por si por alguna razón el SO no la liberara, la mejor práctica es liberarla explicitamente.


Título: Re: Liberar memoria en listas simplemente enlazada [C]
Publicado por: DanielPy en 26 Junio 2015, 23:27 pm
Gracias ivancea96 ha sido de muchas ayuda tus post.-

Daniel