# Verkettete Liste löschen



## blubbs_ (15. April 2007)

Hallo erstmal an alle,

schreib somit mal meinen ersten Beitrag und hab gleich mal eine Frage. 
Dabei handelt es sich wie in der Überschrift schon angedeutet, um ein Problem mit einer verketteten Liste bzw. mit dem Löschen einer solchen.
Hierbei tritt permanent ein Problem auf das ich einfach nicht lösen kann.

Hierzu erstmal der Quellcode der Löschfunktion: 



```
void dltall(void)
{
     wort *p;
     while(Kopf.next!=0)  //Kopf = statisch erzeugtes erstes Element der Liste, alle anderen  
                                               werden dynamisch erzeugt und hinten angehangen
     {
                          p=&Kopf;
                          while(p->next!=0)
                          {
                                           p=p->next;
                          }
                          delete p;
                          p=0;
     }
}
```

Wenn ich den Code kompiliere passiert dies anstandslos und mir werden keine Fehler ausgespuckt, allerdings tritt bei der Ausführung permanent ein Problem auf das das Programm abstürzen lässt. 
Dabei steht definitiv fest das das Problem die Löschfunktion ist da beim auskommentieren dieser das Problem nicht auftritt.
Weiß nun absolut nicht woran dies liegen könnte und hoffe ihr könnt mir helfen.

Außerdem hier noch die Definition der Struktur der Elemente: 


```
struct wort{
       std::string wo;
       wort *next;
};
```

Könnte mir vorstellen das das Problem darin liegt, das ich ein std::string innerhalb der Struktur verwende und dies nun nichts anderes ist als ein dynamisches char - Array ist und es deshalb zum Absturz kommt. 

Also schon mal dank im voraus für alle eventuellen Antworten

Mfg

blubbs_

P.S.: Muss allerdings der Community nochmal ein großes Kompliment machen, finde den Umgangston hier im Forum extrem freundlich und vor allem sachlich.


----------



## Online-Skater (16. April 2007)

Hi ich würde das etwas anders machen.


```
void dltall(List Kopf)
{
     List *p;
     
     while(Kopf->next != 0) 
     {
       p = Kopf->next;
       Kopf->next = p->next;
       delete p;
     }
}
```

mfg ;-)


----------



## MCoder (16. April 2007)

Hallo blubbs,

noch eine kurze Erklärung: Das Problem bei deinem Code entsteht dadurch, dass du den next-Member des Vorgängers nicht auf "0" setzt, wenn du den Nachfolger löscht.
Wie man's besser machen kann, hat ja Online-Skater schon gepostet.

Gruß
MCoder


----------



## blubbs_ (16. April 2007)

Hey danke für die Antwort. Finde die Version von Online_skater auf jeden Fall besser als die Alte von mir.
Natürlich danke auch nochmal für die Erklärung MCoder, hab ich wohl vergessen zu implementieren das der next Pointer des Vorgängers auf null gesetzt werden muss. 

Mfg


----------

