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ì:
Volevo liberare prima ogni singolo campo e poi il puntatore ad ogni nodo e ho fatto così:codice:typedef struct struttura *Ptr; struct struttura { int a; float b; Ptr successivo; }
ovviamente quando la chiamo l è il puntatore al primo nodo
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) { free(l->a); free(l->b); 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..codice:void funzionelibero(link l) { if (l->successivo== NULL) { return; } funzionelibero(l->successivo); free(l); }
Potreste darmi una mano? Come dovrei farlo correttamente?
Grazie in anticipo per l'aiuto e la pazienza!

Rispondi quotando