Liberar memoria en listas simplemente enlazada [C]

Iniciado por DanielPy, 26 Junio 2015, 22:01 PM

0 Miembros y 1 Visitante están viendo este tema.

DanielPy

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?.-

#include <stdio.h>
#include <stdlib.h>

typedef struct{
struct nodo* siguiente;
char* nombre;
} nodo;

nodo* primer = NULL;
nodo* ultimo = NULL;

void agregar(nodo* _nodo){
_nodo -> siguiente = NULL;
if(primer == NULL){
primer = _nodo;
ultimo = _nodo;
}else{
ultimo -> siguiente = _nodo;
ultimo = _nodo;
}
}

int main(){
nodo* primerNodo = malloc(sizeof(nodo));
primerNodo -> nombre = "Primer Elemento";
nodo* segundoNodo = malloc(sizeof(nodo));
segundoNodo -> nombre = "Segundo Elemento";
nodo* tercerNodo = malloc(sizeof(nodo));
tercerNodo -> nombre = "Tercer Elemento";

agregar(primerNodo);
agregar(segundoNodo);
agregar(tercerNodo);
nodo* i = primerNodo;
while(i != NULL){
printf("%s\n", i -> nombre);
i = i -> siguiente;
}
return 0;
}



Desde ya muchas gracias.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

ivancea96

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.

DanielPy

¿Debo suponer que si no la libera el programa el compilador lo realiza igual al cerrarse el programa?.-

Saludos.
Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-

ivancea96

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.

DanielPy

Gracias ivancea96 ha sido de muchas ayuda tus post.-

Daniel
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-