Seite 1 von 1

Liste: Speicher richtig freigeben

Verfasst: Fr Dez 12, 2008 5:12 pm
von nufan
Fast wäre wieder ein Tag ohne einen einzigen Beitrag vergangen - praktisch, dass ich noch eine Frage hab :)

Wenn ich eine Liste anlege, muss ich doch für jeden Knoten Speicher reservieren (mit malloc).
Am Ende des Programms sollte man den verwendeten Speicher doch wieder freigeben.
Genügt es den Kopfzeiger freizugeben

Code: Alles auswählen

free(headpointer);
oder muss ich jeden Knoten einzeln in einer Schleife freigeben

Code: Alles auswählen

while (knoten != NULL)
{

  help = knoten -> next;

  free (knoten);

  knoten = help;

}
?

Nur so nebenbei weils auch zum Thema passt:
Gibt es ein Programm, mit dem ich den verwendeten Speicherbereich beobachten kann (was wird reserviert, freigegeben)?

Re: Liste: Speicher richtig freigeben

Verfasst: Fr Dez 12, 2008 5:28 pm
von Xin
dani93 hat geschrieben:Fast wäre wieder ein Tag ohne einen einzigen Beitrag vergangen - praktisch, dass ich noch eine Frage hab :)
Derzeit ist es etwas mau, aber Tage ohne Beiträge gibt es bisher nur einen.
dani93 hat geschrieben:Wenn ich eine Liste anlege, muss ich doch für jeden Knoten Speicher reservieren (mit malloc).
Am Ende des Programms sollte man den verwendeten Speicher doch wieder freigeben.
Genügt es den Kopfzeiger freizugeben

Code: Alles auswählen

free(headpointer);
oder muss ich jeden Knoten einzeln in einer Schleife freigeben
Du musst alle Knoten freigeben, siehe Listen.
dani93 hat geschrieben:Nur so nebenbei weils auch zum Thema passt:
Gibt es ein Programm, mit dem ich den verwendeten Speicherbereich beobachten kann (was wird reserviert, freigegeben)?
Zum einen kannst Du Dir new und delete überschreiben.
Zum anderen solltest Du Dir mal 'valgrind' ansehen.

Re: Liste: Speicher richtig freigeben

Verfasst: Fr Dez 12, 2008 5:56 pm
von nufan
Xin hat geschrieben:
dani93 hat geschrieben:Wenn ich eine Liste anlege, muss ich doch für jeden Knoten Speicher reservieren (mit malloc).
Am Ende des Programms sollte man den verwendeten Speicher doch wieder freigeben.
Genügt es den Kopfzeiger freizugeben

Code: Alles auswählen

free(headpointer);
oder muss ich jeden Knoten einzeln in einer Schleife freigeben
Du musst alle Knoten freigeben, siehe Listen.
Dachte ich mir schon... auch wenn mein Lehrer heute was anders sagte. :roll:

Hoppla, das hab ich wohl übersehen:

Code: Alles auswählen

void DeleteNode( struct AddressNode * prevNode, struct AddressNode * toBeRemoved )
{
  if( prevNode )
    prevNode->Next = toBeRemoved->Next;
 
  free( toBeRemoved );
}
Xin hat geschrieben:Zum anderen solltest Du Dir mal 'valgrind' ansehen.
Thx, genau so hab ich mir das vorgestellt :)