verständinsproblem addressausgabe dynamische Liste?

1 Antwort

ESP_LOGI(TAG, "printList: %p %s", &pointer, pointer->name);

Du gibst aktuell die Adresse des Zeigers aus (&pointer), nicht die Adresse des Listenelements. Deshalb siehst du immer dieselbe Adresse.

Ändere die Ausgabe auf pointer statt &pointer, also:ESP_LOGI(TAG, "printList: %p %s", pointer, pointer->name);

Woher ich das weiß:eigene Erfahrung

chandler222 
Beitragsersteller
 14.05.2025, 11:04

mhh, das funktioniert.
ganz habe ich es noch nicht verstanden warum. Da muss ich noch mal genauer nachschauen

Santamon  14.05.2025, 11:09
@chandler222

pointer ist der Wert des Zeigers, also die Adresse des gerade referenzierten Listenelements (im Heap).

&pointer ist die Adresse der Variablen pointer selbst (die auf dem Stack liegt).

Da deine lokale Variable pointer immer an derselben Stelle auf dem Stack angelegt wird, ist &pointer konstant. Egal, welchen Inhalt sie gerade hat.

Der Inhalt von pointer ändert sich hingegen, wenn du pointer = pointer->next; machst. Deshalb siehst du mit %p auf pointer auch verschiedene Adressen (nämlich die deiner Listenelemente).

Ich hoffe es ist verständlicher geworden.