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
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.
¿Debo suponer que si no la libera el programa el compilador lo realiza igual al cerrarse el programa?.-
Saludos.
Daniel
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.
Gracias ivancea96 ha sido de muchas ayuda tus post.-
Daniel