C++ und Zeiger?

Hi,

ich muss in C++ folgendes umsetzen und scheiter daran evtl kann mir jemand helfen.

Ich hab keine Kette von Elementen, die jeweils mit Zeigern auf ihren linken und rechten Nachbarn zeigen.

Nun will ich bestimmte Elemente entfernen und habe dafür eine Funktion geschrieben. Ich übergebe den Pointer auf das erste Element und die Stelle die ich löschen möcht, klappt soweit ganzg gut nur wenn ich das erste Element löschen will, dann wird innerhalb der Funktion der Pointer auf das 2te Element gesetzt und alle Pointer vom und auf das erste Element auf NULL gesetzt, sobalt ich aber aus der Funktion raus gehe springt der Pointer wieder auf das erste Element und bleibt nicht auf dem 2ten wodurch es später im Programm zum absturz führt da das Element ja nur noch auf NULL zeigt.

Warum springt der Pointer zurück und wie schaff ich es dass die Startadresse auf dem alten Element 2 bleibt?

Hi

Ohne ein paar Zeilen Quellcode wird man dir da wohl kaum helfen können.

MfG IGnow

Hi,

das hat mit C++ erstmal nichts zu tun, würde in C dasselbe Problem ergeben.

Du übergibst den Pointer auf das erste Element als Value, daher bleibt im aufrufenden Programm dessen Wert erhalten, was in der Unterfunktion passiert, interessiert da nicht.

Um dem abzuhelfen, musst Du den Pointer als Reference übergeben, d.h. einen Pointer darauf, also

remove(NodeType** first, NodeType * ToRemove){…}

NodeType * first, * toremove;
remove(&firstpointer, toremove);

Gruß Lutz

Hallo new_soli

Warum springt der Pointer zurück

weil das im Code so drinsteht…

und wie schaff ich es dass
die Startadresse auf dem alten Element 2 bleibt?

Mit einem temporären Pointer (Member der Klasse oder global). Die Funktion kopiert den Einen dorthin, mit dem nächstes Mal fortgefahren werden soll; oben in der Funktion steht dann „mit diesem beginnen“.

Nochwas:
Mache dir zum Einfügen/Löschen etc. je eine eigene Funktion, welche die Pointer links und rechts verlässlich zusammen hängt. So bleibst Du auf der sicheren Seite.

lG
Martin B