View Full Version : [C/C++] Domanda rapida: come distruggere una lista?
zanardi84
04-01-2012, 10:51
Come da titolo, come si distrugge una lista?
Basta cancellare la testa, senza riassegnarla per fare sì che tutti gli altri nodi di quella siano considerati inconsistenti e quindi dare modo di scrivere nelle locazioni?
O è meglio fare un lavoro più pulito con un ciclo di scansione e cancellazione nodo per nodo?
Penso nodo per nodo se stiamo parlando di una lista implementata da te.
O è meglio fare un lavoro più pulito con un ciclo di scansione e cancellazione nodo per nodo?
Il dilemma non è "più pulito" / "meno pulito" ma "giusto" / "sbagliato" (aka memory leaks come se piovesse).
Se la lista come immagino è di tua implementazione devi cancellare un nodo alla volta.
ciao!
zanardi84
04-01-2012, 20:30
Nella mia inesperienza ero convinto che bastasse cancellare un nodo solo, senza ricollegare gli altri, per rendere quelle aree utilizzabili per altri scopi!
Vi ringrazio!
tecno789
05-01-2012, 16:35
Nella mia inesperienza ero convinto che bastasse cancellare un nodo solo, senza ricollegare gli altri, per rendere quelle aree utilizzabili per altri scopi!
Vi ringrazio!
se elimini solo un nodo, avresti il "garbage" degli altri e quindi spreco di memoria, quindi il metodo migliore e più efficiente è quello descritto sopra.
Se sei sotto Linux, ti consiglio, come faccio sempre in questi casi, l'ottimo tool valgrind, che ti consente di analizzare eventuali problemi di accesso e gestione della memoria.
Secondo me è un tool eccellente per scopi didattici e non (mozilla lo usa per Firefox), dovrebbero assolutamente farlo usare anche nei vari corsi...
Se sei sotto Linux, ti consiglio, come faccio sempre in questi casi, l'ottimo tool valgrind, che ti consente di analizzare eventuali problemi di accesso e gestione della memoria.
Secondo me è un tool eccellente per scopi didattici e non (mozilla lo usa per Firefox), dovrebbero assolutamente farlo usare anche nei vari corsi...
Quoto fortissimo.
zanardi84
14-01-2012, 10:58
Ho provato a scrivere del codice, ma purtroppo non funziona!
int distruggi_lista()
{
LISTA *p, *t;
p = head;
int i=0;
if (p== NULL)
{
cout << "LISTA VUOTA" << endl;
return 0;
}
while(p!=NULL)
{
t = p;
p = p->successivo;
delete t;
i++;
}
if(i>0)
{
cout << "CANCELLATA! " << i << endl;
}
return 0;
}
Cosa non va?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.