002
25.07.2006, 16:35 Uhr
0xdeadbeef
Gott (Operator)
|
Ah, Moment, da hast du was falsch verstanden. delete zerstört nicht den Zeiger, sondern das Objekt, auf das er zeigt. Daher ist
C++: |
q = p; delete q; p = p->next;
|
auch nicht zulässig, weil
zu einem Zeitpunkt referenziert wird, als p schon nicht mehr gültig ist. (Klassischer Heisenbug, das)
An dieser Stelle heißt das Zauberwort Rekursion - wenn man einmal sieht, dass, wenn p eine Liste ist, p->next ebenfalls eine Liste ist, ist es ganz simpel:
C++: |
void delList(Element *h) { if(h) { delList(h->next); delete h; } }
|
Versuch mal nachzuvollziehen, was da passiert, das wird dir schon gut weiterhelfen -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |