Salve, ho studiato e cercato online ma ho qualche dubbio che non riesco a togliermi.. magari potete darmi una mano.. se ho una lista concatenata non doppia con i nodi fatti così:
codice:
typedef struct struttura *Ptr;
struct struttura {
int a;
float b;
Ptr successivo;
}
Volevo liberare prima ogni singolo campo e poi il puntatore ad ogni nodo e ho fatto così:
ovviamente quando la chiamo l è il puntatore al primo nodo
codice:
void funzionelibero(link l)
{
if (l->successivo== NULL)
{
free(l->a);
free(l->b);
return;
}
funzionelibero(l->successivo);
free(l);
}
Però mi segnala un errore e da quanto ho capito credo ci sia perché free si aspetta un puntatore alla memoria da liberare e non un valore preciso.. allora, a questo punto, scriverei così:
codice:
void funzionelibero(link l)
{
if (l->successivo== NULL)
{
return;
}
funzionelibero(l->successivo);
free(l);
}
Il punto è: è giusto? Ha senso? Si liberano da soli tutti i campi dei nodi? Facendo così ho la "sensazione" di liberare solo il puntatore ai nodi ma i nodi continuano ad esistere da qualche parte..
Potreste darmi una mano? Come dovrei farlo correttamente?
Grazie in anticipo per l'aiuto e la pazienza!