Liste: Speicher richtig freigeben

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Liste: Speicher richtig freigeben

Beitrag von nufan » Fr Dez 12, 2008 5:12 pm

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)?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Liste: Speicher richtig freigeben

Beitrag von Xin » Fr Dez 12, 2008 5:28 pm

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Liste: Speicher richtig freigeben

Beitrag von nufan » Fr Dez 12, 2008 5:56 pm

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 :)

Antworten