<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Über Speicherbereich iterieren, ohne ihn zu ändern]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>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?</p>
<p>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.</p>
<pre><code>void foo(void * p, int size) {
    unsigned char * c = reinterpret_cast&lt;unsigned char*&gt;(p);
    ...
</code></pre>
<p>Das reinterpret_cast verändert aber die Bitstruktur im Speicher, was ich über den Debugger feststellen konnte.</p>
<p>Mein zweiter Ansatz war über templates:</p>
<pre><code>template&lt;typename U&gt;
void foo(U p, int size) {
    unsigned char * c = reinterpret_cast&lt;unsigned char*&gt;(p);
    ...
</code></pre>
<p>Doch auch hier tritt das gleiche Problem auf.<br />
Folgendes dazu habe ich auch auf StackOverflow gefunden: <a href="http://stackoverflow.com/a/4219558" rel="nofollow">http://stackoverflow.com/a/4219558</a></p>
<p>Daher wollte ich hier mal nachfragen, wie ich meinen Pointer so nutzen kann, um auf die einzelnen Bytes zuzugreifen ohne das die Bitstruktur sich ändert.</p>
<p>Schöne Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/336029/über-speicherbereich-iterieren-ohne-ihn-zu-ändern</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 00:26:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/336029.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Dec 2015 00:42:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Über Speicherbereich iterieren, ohne ihn zu ändern on Tue, 29 Dec 2015 00:42:43 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>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?</p>
<p>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.</p>
<pre><code>void foo(void * p, int size) {
    unsigned char * c = reinterpret_cast&lt;unsigned char*&gt;(p);
    ...
</code></pre>
<p>Das reinterpret_cast verändert aber die Bitstruktur im Speicher, was ich über den Debugger feststellen konnte.</p>
<p>Mein zweiter Ansatz war über templates:</p>
<pre><code>template&lt;typename U&gt;
void foo(U p, int size) {
    unsigned char * c = reinterpret_cast&lt;unsigned char*&gt;(p);
    ...
</code></pre>
<p>Doch auch hier tritt das gleiche Problem auf.<br />
Folgendes dazu habe ich auch auf StackOverflow gefunden: <a href="http://stackoverflow.com/a/4219558" rel="nofollow">http://stackoverflow.com/a/4219558</a></p>
<p>Daher wollte ich hier mal nachfragen, wie ich meinen Pointer so nutzen kann, um auf die einzelnen Bytes zuzugreifen ohne das die Bitstruktur sich ändert.</p>
<p>Schöne Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2481021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2481021</guid><dc:creator><![CDATA[MemoryEffekt]]></dc:creator><pubDate>Tue, 29 Dec 2015 00:42:43 GMT</pubDate></item><item><title><![CDATA[Reply to Über Speicherbereich iterieren, ohne ihn zu ändern on Tue, 29 Dec 2015 00:48:56 GMT]]></title><description><![CDATA[<p>MemoryEffekt schrieb:</p>
<blockquote>
<p>Das reinterpret_cast verändert aber die Bitstruktur im Speicher, was ich über den Debugger feststellen konnte.</p>
</blockquote>
<p>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?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2481022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2481022</guid><dc:creator><![CDATA[sebi707]]></dc:creator><pubDate>Tue, 29 Dec 2015 00:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to Über Speicherbereich iterieren, ohne ihn zu ändern on Tue, 29 Dec 2015 01:28:31 GMT]]></title><description><![CDATA[<p>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 <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Ich schieb das mal auf die Uhrzeit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2481023</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2481023</guid><dc:creator><![CDATA[MemoryEffekt]]></dc:creator><pubDate>Tue, 29 Dec 2015 01:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to Über Speicherbereich iterieren, ohne ihn zu ändern on Tue, 29 Dec 2015 02:05:08 GMT]]></title><description><![CDATA[<p>Dumbest thread - ever</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2481024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2481024</guid><dc:creator><![CDATA[hehe]]></dc:creator><pubDate>Tue, 29 Dec 2015 02:05:08 GMT</pubDate></item></channel></rss>