Über Speicherbereich iterieren, ohne ihn zu ändern
-
Hallo allerseits,
angenommen ich habe einen Pointer auf einen Speicherbereich, zum Beispiel über malloc() oder auf ein Struct auf dem Stack, und möchte über diesen Bereich nun Byteweise drübergehen, wie kann ich das machen, ohne dass der Speicherbereich sich ändert?
Ich habe zwei Ansätz ausprobiert. Zum einen erhält meine Funktion einen void pointer, welche die Addresse des Speicherbereichs hält. Da der void pointer ja keine Größe hat, muss ich ihn vorher casten, sodass ich den Index operator verwenden kann.
void foo(void * p, int size) { unsigned char * c = reinterpret_cast<unsigned char*>(p); ...Das reinterpret_cast verändert aber die Bitstruktur im Speicher, was ich über den Debugger feststellen konnte.
Mein zweiter Ansatz war über templates:
template<typename U> void foo(U p, int size) { unsigned char * c = reinterpret_cast<unsigned char*>(p); ...Doch auch hier tritt das gleiche Problem auf.
Folgendes dazu habe ich auch auf StackOverflow gefunden: http://stackoverflow.com/a/4219558Daher wollte ich hier mal nachfragen, wie ich meinen Pointer so nutzen kann, um auf die einzelnen Bytes zuzugreifen ohne das die Bitstruktur sich ändert.
Schöne Grüße
-
MemoryEffekt schrieb:
Das reinterpret_cast verändert aber die Bitstruktur im Speicher, was ich über den Debugger feststellen konnte.
Das halte ich für ein Gerücht. Der Stackoverflow Thread redet auch eher vom Bitmuster des Teils was du Castest, also in deinem Fall der Pointer. Der Speicher wohin der Pointer zeigt ändert sich sicher nicht. Kann es sein das dir der Debugger einen Streich spielt? Hast du die Werte mal vom Programm ausgeben lassen?
-
Hast recht, und ich hatte mich auch schon gewundert, wieso der denn den Speicherbereich verändert. Der Fehler lag daran, dass ich der Funktion die Addresse des Pointers übergeben habe

Ich schieb das mal auf die Uhrzeit

-
Dumbest thread - ever