001
24.02.2014, 18:02 Uhr
Hans
Library Walker (Operator)
|
Hi, das ist jetzt etwas umständlich zu erklären, deshalb nur kurz der Tip: Sieh Dir das Geschehen am besten mit einem Debugger an, der auf Quellcodeebene arbeitet, und sofern die Möglichkeit besteht, wie er auf den Specher zugreift.
Ansonsten: über den Zeiger node greifst Du immer auf den Zeiger next der Datenstruktur zu, den Du mit den Zeilen
C++: |
node->next = Anker; // Hänge die bisherige Liste an Anker = node; // Setze den Anfangspunkt hierher
|
jedesmal änderst. Am besten malt man sich das mal auf um es nachzuvollziehen.
----- Edit: Die Adresse, die dem Zeiger in Zeile x zugewiesen wird, speicherst Du am Ende des if-blocks in Anker, was einen Zwischenspeicher darstellt. Dadurch kann der Wert von node überschrieben werden ohne dass man ein Problem bekommt, denn der bisherige Wert befindet sich ja in Anker. Und Anker wird ja zuvor wiederum im next-element der aktuellen Struktur gesichert, womit die Verkettung der Elemente gewährleistet ist. Du kannst die Zuweisung an Anker ja mal testweise weg lassen, also so:
C++: |
if (Inhalt) { // Neues Element für die Liste erzeugen: /*Zeile x: */ TListenKnoten *node = new TListenKnoten; node->data = Inhalt; // Besetze die Daten node->next = Anker; // Hänge die bisherige Liste an // Anker = node; // Setze den Anfangspunkt hierher - Testweise auskommentiert }
|
dann wird das Programm nichts mehr ausgeben. Sowas sollte man im allgemeinen aber tunlichst sein lassen, weil man dadurch Speicher voll schreibt, auf den man später nicht mehr zugreifen kann.
Hans -- Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung. Dieser Post wurde am 24.02.2014 um 21:10 Uhr von Hans editiert. |