<?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[In Schleife eine Adresse weiter rauszählen, als vorhanden]]></title><description><![CDATA[<p>Ist sowas in Ordnung, und gängige Praxis, oder kann mir dass irgendwie den Code um die Ohrenhauen? Ich hab ja immer gedacht, so lang man die jeweilige Adresse nicht dereferenziert, passiert nix, man liest sie ja nur?!</p>
<pre><code class="language-cpp">int a[4] = {0};

    for(int *p = a; p != a+4; ++p)
    {
        cout &lt;&lt; *p &lt;&lt; endl;
    }
</code></pre>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234165/in-schleife-eine-adresse-weiter-rauszählen-als-vorhanden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 15:55:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234165.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 14 Feb 2009 00:52:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 00:52:10 GMT]]></title><description><![CDATA[<p>Ist sowas in Ordnung, und gängige Praxis, oder kann mir dass irgendwie den Code um die Ohrenhauen? Ich hab ja immer gedacht, so lang man die jeweilige Adresse nicht dereferenziert, passiert nix, man liest sie ja nur?!</p>
<pre><code class="language-cpp">int a[4] = {0};

    for(int *p = a; p != a+4; ++p)
    {
        cout &lt;&lt; *p &lt;&lt; endl;
    }
</code></pre>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663562</guid><dc:creator><![CDATA[Stromberg*]]></dc:creator><pubDate>Sat, 14 Feb 2009 00:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 01:44:39 GMT]]></title><description><![CDATA[<p>Stromberg* schrieb:</p>
<blockquote>
<p>Ist sowas in Ordnung, und gängige Praxis, oder kann mir dass irgendwie den Code um die Ohrenhauen?</p>
</blockquote>
<p>Das ist okay. Gängig ist allerdings eher die Verwendung von <code>operator[]</code> .</p>
<p>Stromberg* schrieb:</p>
<blockquote>
<p>Ich hab ja immer gedacht, so lang man die jeweilige Adresse nicht dereferenziert, passiert nix, man liest sie ja nur?!</p>
</blockquote>
<p>Du dereferenzierst sehr wohl, schliesslich hast du einen <code>operator*</code> drin. Passieren kann allerdings rein gar nichts. Das Array ist sogar initialisiert. Aber selbst wenn es nicht initialisiert wäre, könnte nichts passieren, du hättest dann einfach willkürliche Werte drin.</p>
<p>Edit: Ah, ich hab den Post noch einmal gelesen. Wahrscheinlich machst du dir wegen des <code>a+4</code> Sorgen. Auch diese sind unbegründet; wie du schon richtig sagst, liest du die Adresse nur.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663570</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Feb 2009 01:44:39 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 01:44:19 GMT]]></title><description><![CDATA[<p>Vll. verwechsel ich dass jetzt mit sowas:</p>
<pre><code class="language-cpp">delete p;
cout &lt;&lt; *p &lt;&lt; endl;
</code></pre>
<p>Dass ist doch definitiv böse?<br />
Was für Situationen gibts den noch, in denen falsche Zeigerhandhabung, dass danze Programm crashen lästt?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663571</guid><dc:creator><![CDATA[Stromberg*]]></dc:creator><pubDate>Sat, 14 Feb 2009 01:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 02:03:54 GMT]]></title><description><![CDATA[<p>Es ist allerdings nur für das Element hinter dem letzten OK.<br />
Wenn du den Zeiger weiter raufzählst ist es UB. (Auch wenn du den Zeiger nicht dereferenzierst! Und auch wenn es mit den allermeisten Compilern/Implementierungen überhaupt kein Problem macht.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663575</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 14 Feb 2009 02:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 02:07:12 GMT]]></title><description><![CDATA[<p>Ich hab den oberen Beitrag noch editiert.</p>
<p>Grundsätzlich ist das Dereferenzieren von ungültigen Zeigern böse. Ungültig ist ein Zeiger, wenn er nicht initialisiert wurde, wenn das verwiesene Objekt nicht mehr existiert, wenn man es sonst irgendwie schafft, den Zeiger zu verbiegen (eher selten) oder wenn der Zeiger Null ist (da erhält man wenigstens einen richtigen Laufzeitfehler).</p>
<p>Das Böse daran ist, dass es nicht einmal crashen muss, sondern undefiniertes Verhalten hervorruft. Das Programm kann normal weiterlaufen, in einer Fehlermeldung enden, es können irgendwelche Daten oder sogar (Rück-)Sprungadressen überschrieben werden, es kann auch gar nichts passieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663576</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Feb 2009 02:07:12 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 04:06:21 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>: selbst der Zugriff auf einen nicht-initialisierten Zeiger ist UB. Also nicht Dereferenzieren, sondern bloss &quot;a = b&quot;, wenn b ein nicht-initialisierter Zeiger ist, ist UB. Das einzige was man mit einem nicht-initialisierten (oder sonstwie ungültigen) Zeiger machen darf, ist ihn mit einem gültigen Wert zu überschreiben. Also nochmal ganz klar:</p>
<pre><code class="language-cpp">char* a; // OK soweit
char* b; // &quot;&quot;
b = a; // &lt;-- UB, weil a nicht initialisiert ist. und zwar ganz egal was wir mit a oder b später noch anstellen (oder nicht anstellen)
</code></pre>
<p>Die Ausnahme für das &quot;one past last&quot; Element von z.B. Arrays gibt es im Prinzip nur, damit man bei den in der Std. Library üblichen halboffenen Intervallen (&quot;[begin, end)&quot;) nicht dauernd Probleme bekommt. Sonst könnte man z.B. ja nichtmal ein Array mit std::fill füllen oder mit std::copy kopieren.</p>
<p>p.S.: die Einschränkung, dass man ungültige Zeiger nichtmal rumreichen darf, sondern eben nur überschreiben, gibt es, um z.B. Implementierungen zu ermöglichen, auf Systemen, wo ungültige Zeiger nichtmal in ein Register geladen werden können. Wenn z.B. ein Zeiger aus einem Segment-Descriptor + Offset besteht, und die CPU beim Laden des Zeigers in ein Register prüft, ob der Segment-Descriptor gültig ist, dann würde man Probleme bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663590</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 14 Feb 2009 04:06:21 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 11:54:19 GMT]]></title><description><![CDATA[<p>Also &quot;a+4&quot; ist erlaubt, aber mehr als ein Feld drüber gehen darf man nicht? Und man darf es vorallem nicht dereferenzieren!?<br />
Kann ich mir dass einfach so vorstellen wie den &quot;end-Iterator&quot;?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663666</guid><dc:creator><![CDATA[Stromberg*]]></dc:creator><pubDate>Sat, 14 Feb 2009 11:54:19 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 12:04:38 GMT]]></title><description><![CDATA[<p>hustbaer, vielen Dank für die Erklärung, das war mir bisher nicht bewusst. Ich dachte, Zeiger würden sich diesbezüglich wie andere Objekte verhalten, und sofern man für sie genügend Platz bereitgestellt hätte, dürfe man sie auch lesen (aber nicht dereferenzieren).</p>
<p>Gut, in der Praxis kommt es eigentlich eh nie vor, dass man uninitialisierte Zeiger herumreicht, deswegen ist das Undefined Behaviour nicht sehr schlimm. Aber dennoch gut zu wissen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Stromberg*, hustbaer hat ja bereits alles dazu gesagt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663672</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Feb 2009 12:04:38 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 12:23:50 GMT]]></title><description><![CDATA[<p>Gerade noch eine Frage dazu: Gilt die erwähnte Ausnahme auch für das Element vor dem Array (analog zu <code>rend()</code> bei Iteratoren?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663680</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Feb 2009 12:23:50 GMT</pubDate></item><item><title><![CDATA[Reply to In Schleife eine Adresse weiter rauszählen, als vorhanden on Sat, 14 Feb 2009 17:45:48 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Gerade noch eine Frage dazu: Gilt die erwähnte Ausnahme auch für das Element vor dem Array (analog zu <code>rend()</code> bei Iteratoren?)</p>
</blockquote>
<p>Weiss ich nicht, glauber aber eher nicht.<br />
Lies im Standard nach <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663870</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 14 Feb 2009 17:45:48 GMT</pubDate></item></channel></rss>