Pointer auf Speicher in mehreren Funktionen verändern?
-
Ich habe einen Pointer auf einen Byteblock:
std::uint8_t* pBlock = getByteBlock();Diesen Byteblock möchte ich nun parsen:
parse(pBlock); // ... void parse(std::uint8_t* pBlock) { parse_A_Attribute(pBlock); parse_B_Attribute(pBlock); } void parse_A_Attribute(std::uint8_t* pBlock) { // ... ++pBlock; // ... pBlock += 4; }pBlock wird also in "parse" an mehrere Funktionen übergeben, die intern den Pointer inkrementieren und ihre Daten aus dem Block ziehen. Je nach Aufbau des Blocks ist die Anzahl der Bytes, die in parse_A_Attribute und parse_B_Attribute verarbeitet werden, ganz unterschiedlich
Nun habe ich festgestellt, dass zwar in 'parse_A_Attribute' 5x inkrementiert wird, nach der Rückkehr in "parse" der Pointer aber wieder auf den initialen Wert zeigt.
Wird die Adresse pBlock einfach kopiert und ich inkrementiere die Kopie
?Wie kann ich das umgehen? Oder muss ich jetzt Pointer auf Pointer machen

-
Die Zeile mit der "+= 4" ist ein schlechtes Beispiel, im Code taucht das nicht auf. Dort gibt es nur "++pBlock"
-
Verlorener schrieb:
Wird die Adresse pBlock einfach kopiert und ich inkrementiere die Kopie
?Ja
Verlorener schrieb:
Wie kann ich das umgehen? Oder muss ich jetzt Pointer auf Pointer machen
Referenz auf Zeiger übergeben oder den neuen Zeiger zurückgeben.
-
Natürlich ist das eine Kopie! Wenn du den Pointer selber verändern willst, kannst du eine Referenz darauf übergeben. Besser wäre es, wenn du den Wert als return zurückliefest. Dann kann der Aufrufer entscheiden, ob der ursprüngliche Pointer verändert werden soll.