<?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[Frage zu Arrays]]></title><description><![CDATA[<p>Wie gibt man am besten (große) Arrays zurück? Da die Arrays groß sind, macht es Sinn, sie mit new zu erzeugen. Angenommen ich habe eine Methode</p>
<pre><code class="language-cpp">T* blub();
</code></pre>
<p>Kann ich irgendwie herausfinden, welche Größe das zurückgebene Array hat? Irgendwie muss ich Größe ja bekannt sein, denn beim Aufruf von delete[] weiß das Programm bzw. das Betriebssystem ja auch, wie viel es freigeben muss.<br />
Momentan nutze ich folgendes Konstrukt, wobei int die Größe des Arrays ist:</p>
<pre><code class="language-cpp">std::pair&lt;T*, int&gt; blub();
</code></pre>
<p>Besonders schön finde ich das jetzt nicht, von daher wollte ich fragen, ob man das normalerweise anders macht bzw. was die beste Möglichkeit ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/299555/frage-zu-arrays</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 03:29:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/299555.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Feb 2012 19:37:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 19:37:49 GMT]]></title><description><![CDATA[<p>Wie gibt man am besten (große) Arrays zurück? Da die Arrays groß sind, macht es Sinn, sie mit new zu erzeugen. Angenommen ich habe eine Methode</p>
<pre><code class="language-cpp">T* blub();
</code></pre>
<p>Kann ich irgendwie herausfinden, welche Größe das zurückgebene Array hat? Irgendwie muss ich Größe ja bekannt sein, denn beim Aufruf von delete[] weiß das Programm bzw. das Betriebssystem ja auch, wie viel es freigeben muss.<br />
Momentan nutze ich folgendes Konstrukt, wobei int die Größe des Arrays ist:</p>
<pre><code class="language-cpp">std::pair&lt;T*, int&gt; blub();
</code></pre>
<p>Besonders schön finde ich das jetzt nicht, von daher wollte ich fragen, ob man das normalerweise anders macht bzw. was die beste Möglichkeit ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180707</guid><dc:creator><![CDATA[Accountloser_Benutzer]]></dc:creator><pubDate>Mon, 13 Feb 2012 19:37:49 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 19:53:52 GMT]]></title><description><![CDATA[<p>du könntest auch std::array aus dem neuen c++0x nehmen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180717</guid><dc:creator><![CDATA[vario-500]]></dc:creator><pubDate>Mon, 13 Feb 2012 19:53:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 19:56:51 GMT]]></title><description><![CDATA[<p>Um mal (hoffentlich) alle grundsätzlichen Möglichkeiten erwähnt zu haben:<br />
-Array in der aufrufenden Funktion erstellen und in der aufgerufenen Funktion beschreiben<br />
-std::array verwenden<br />
-std::vector verwenden<br />
-Kopieren und auf RVO/NRVO vertrauen<br />
-die Größe als Out-Parameter zurückgeben<br />
-das Array als Out-Parameter zurückgeben<br />
-beide als Out-Parameter zurückgeben</p>
<p>Die beste Möglichkeit ist IMHO std::vector mit RVO/NRVO, aber das kommt auf den Anwendungszweck an.</p>
<p>Da wären noch einige Fragen:<br />
-Wofür?<br />
-Muss die Größe dynamisch sein?</p>
<p>Zu delete[]: Das ist dem Compiler überlassen, wie er die Größeninformation bekommt, da kann man meines Wissens nicht eingreifen. Für malloc()/free() gilt das Gleiche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180718</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Mon, 13 Feb 2012 19:56:51 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 19:56:29 GMT]]></title><description><![CDATA[<p>STL-Container wie <code>std::vector</code> . Übernehmen die komplette Speicherverwaltung, haben nette Methoden zum Einfügen oder Löschen und bieten Checks im Debug-Modus an. Und die Grösse speichern sie natürlich auch mit.</p>
<p>Rückgabe ist allerdings ein potentielles Problem, da eine teure Kopie entstehen könnte. Mit (N)RVO oder spätestens C++11-Move-Semantik ist das Problem aber vom Tisch. Und vorher kann man, um sicher zu gehen, z.B. Output-Parameter mit Referenzen verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180721</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Feb 2012 19:56:29 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 20:57:31 GMT]]></title><description><![CDATA[<p>Erstmal danke für die schnellen Antworten.</p>
<p>@Wofür?:<br />
Ich berechne z.B. die SVD einer Matrix A und gebe (u.a.) die Singulärwerte als Array zurück. Da der Rang von A nicht maximal sein muss, ist die Größe des Arrays beim Aufruf der Funktion unbekannt. Nachträglich muss ich keine Werte mehr manipulieren oder hinzufügen oder Ähnliches, sondern eigentlich nur lesen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23670">@wxSkip</a>:<br />
Mir fällt noch eine Möglichkeit ein:<br />
ein struct definieren, dass T* und int enthält.</p>
<p>std::vector kommt mir für meinen Zweck etwas aufgebläht vor. Gibt es bei vector eine Methode, die den Zeiger auf das erste Element zurückgibt. Ich sehe nämlich gerade keine. Aber das wäre nützlich, da ich bereits Methoden geschrieben hab, die T* und die Größe als Parameter übergeben bekommen. Von daher vermute ich, dass std::array für mich geeigneter ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180742</guid><dc:creator><![CDATA[Accountloser_Benutzer]]></dc:creator><pubDate>Mon, 13 Feb 2012 20:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 21:01:31 GMT]]></title><description><![CDATA[<p>Accountloser_Benutzer schrieb:</p>
<blockquote>
<p>Erstmal danke für die schnellen Antworten.</p>
<p>@Wofür?:<br />
Ich berechne z.B. die SVD einer Matrix A und gebe (u.a.) die Singulärwerte als Array zurück. Da der Rang von A nicht maximal sein muss, ist die Größe des Arrays beim Aufruf der Funktion unbekannt. Nachträglich muss ich keine Werte mehr manipulieren oder hinzufügen oder Ähnliches, sondern eigentlich nur lesen.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/23670">@wxSkip</a>:<br />
Mir fällt noch eine Möglichkeit ein:<br />
ein struct definieren, dass T* und int enthält.</p>
<p>std::vector kommt mir für meinen Zweck etwas aufgebläht vor. Gibt es bei vector eine Methode, die den Zeiger auf das erste Element zurückgibt. Ich sehe nämlich gerade keine. Aber das wäre nützlich, da ich bereits Methoden geschrieben hab, die T* und die Größe als Parameter übergeben bekommen. Von daher vermute ich, dass std::array für mich geeigneter ist.</p>
</blockquote>
<p>Deine Möglichkeit ist eine umständliche Variante deines std::pair&lt;&gt;-Vorschlags. Für den Pointer brauchst du nur &amp;vec[0] zu schreiben - daher ist vector auch perfekt für dich geeignet <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/2180745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180745</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Mon, 13 Feb 2012 21:01:31 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 21:05:17 GMT]]></title><description><![CDATA[<p>Accountloser_Benutzer schrieb:</p>
<blockquote>
<p>Gibt es bei vector eine Methode, die den Zeiger auf das erste Element zurückgibt.</p>
</blockquote>
<pre><code class="language-cpp">vector&lt;T&gt;::iterator i = vec.begin(); // Zeiger aufs 1. Element.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2180748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180748</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 13 Feb 2012 21:05:17 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 21:18:29 GMT]]></title><description><![CDATA[<p>Gugelmoser schrieb:</p>
<blockquote>
<pre><code class="language-cpp">vector&lt;T&gt;::iterator i = vec.begin(); // Zeiger aufs 1. Element.
</code></pre>
</blockquote>
<p>Nein, Iterator aufs erste Element. Er schreibt doch schon explizit, dass er Funktionen hat, die Pointer plus Größe des Arrays entgegennehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180753</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 13 Feb 2012 21:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 21:24:58 GMT]]></title><description><![CDATA[<p>Noch eine Frage:<br />
Wenn ich &quot;T* data&quot; und &quot;int size&quot; gegeben hab, wie konstruiere ich daraus einen vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180755</guid><dc:creator><![CDATA[Accountloser_Benutzer]]></dc:creator><pubDate>Mon, 13 Feb 2012 21:24:58 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 21:28:59 GMT]]></title><description><![CDATA[<p>Guckst du hier (mit Beispiel): <a href="http://www.cplusplus.com/reference/stl/vector/vector/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/vector/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180758</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 13 Feb 2012 21:28:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 21:36:13 GMT]]></title><description><![CDATA[<p>Kann man</p>
<pre><code class="language-cpp">vector&lt;T&gt; (data, &amp;data[size]);
</code></pre>
<p>schreiben oder kann das zu Problemen führen, da data[size] ja eigentlich nicht existiert? Aber durch &amp; wird darauf ja gar nicht zugegriffen oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180765</guid><dc:creator><![CDATA[Accountloser_Benutzer]]></dc:creator><pubDate>Mon, 13 Feb 2012 21:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 21:55:23 GMT]]></title><description><![CDATA[<p>Ich denke nicht, dass du in der Praxis Probleme damit bekommst, aber erlaubt ist es eigentlich nicht, weil zuerst data[size] ausgewertet wird und erst dann die Adresse davon genommen wird. Schreib doch einfach wie im verlinkten Beispiel</p>
<pre><code class="language-cpp">vector&lt;T&gt; (data, data + size);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2180775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180775</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 13 Feb 2012 21:55:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 22:35:45 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>...weil zuerst data[size] ausgewertet wird...</p>
</blockquote>
<p>Hmmmm...</p>
<p>Caligulaminus' Bauch sagt: Da wird nichts ausgewertet, sondern schlicht und ergreifend eine Adresse errechnet.</p>
<p>Ich finde</p>
<pre><code>vector&lt;T&gt; (data, data + size);
</code></pre>
<p>auch schöner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180802</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 13 Feb 2012 22:35:45 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 22:52:21 GMT]]></title><description><![CDATA[<p>@Accountloser_Benutzer &amp; Caligulaminus</p>
<p>Ob auf etwas &quot;zugegriffen&quot; wird, oder nicht, ist vollkommen egal, da der Standard sagt, dass man keine ungültigen Adressen erzeugen oder rumreichen darf.<br />
(Ausnahme: man kann und darf undefinierte Adressen erzeugen, indem man einen Zeiger erzeugt ohne ihn zu initialisieren. Man darf diesen Zeiger dann aber nur überschreiben, und auch nicht z.B. rumreichen oder kopieren.)</p>
<p>D.h. <code>&amp;data[size]</code> wäre grundsätzlich problematisch.</p>
<p>Wäre, weil es genau für das &quot;one past last element&quot; von Arrays eine grosse dicke Ausnahme im Standard gibt: man darf die Adresse des &quot;one past last element&quot; erzeugen und auch rumreichen.<br />
Diese Ausnahme existiert, um eine gängige Praxis zu legalisieren: das Arbeiten mit Zeigerpaaren, von denen der &quot;end&quot; zeiger eben genau eins hinter das letzte Element zeigt.</p>
<p>Dadurch ist <code>&amp;data[size]</code> also doch wieder legal.</p>
<p>( <code>&amp;data[size + 1]</code> bleibt aber dennoch falsch, ganz egal ob man nun auf das Element zugreift oder nicht. Einzige Ausnahme wäre innerhalb von sizeof()/typeid() oder ähnlichen Konstrukten, wo so-gut-wie alles erlaubt ist.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180807</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 13 Feb 2012 22:52:21 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 23:03:26 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Dadurch ist <code>&amp;data[size]</code> also doch wieder legal.</p>
</blockquote>
<p>Hast du einen Beleg dafür? Ich weiß, dass man <code>data + size</code> genau wegen dieser Ausnahme berechnen darf, aber ich sehe noch nicht, woraus dann die Legalität von <code>&amp;data[size]</code> folgt.</p>
<p>Meine Meinung (ohne Recherche): <code>data[size]</code> ist nicht definiert, weshalb ein Zeiger darauf ebenfalls nicht definiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180811</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180811</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 13 Feb 2012 23:03:26 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 23:08:37 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>[..]der Standard sagt, dass man keine ungültigen Adressen erzeugen oder rumreichen darf.[..]<br />
[..]grosse dicke Ausnahme[..]<br />
[..]man darf die Adresse des &quot;one past last element&quot; erzeugen und auch rumreichen.[..]</p>
</blockquote>
<p>Hmmm... elegant is dann aber doch anders. Naja - gewachsene Systeme halt...</p>
<p>Legal oder illegal, es wird nichts ausgewertet, sondern lediglich eine(pseudo-)Adresse errechnet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180815</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 13 Feb 2012 23:08:37 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 23:19:52 GMT]]></title><description><![CDATA[<p>Caligulaminus schrieb:</p>
<blockquote>
<p>Legal oder illegal, es wird nichts ausgewertet, sondern lediglich eine(pseudo-)Adresse errechnet.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> Wenn der Code illegal ist, sprich UB hat, kann er auch die Adresse von Barack Obama berechnen und daraufhin Shakespeare zitieren. Und das alles sogar, <strong>bevor</strong> die pöse Zeile erreicht wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180822</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 13 Feb 2012 23:19:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 23:31:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/20068">@Michael</a> E.:<br />
Beleg hab' ich keinen dafür zur Hand.</p>
<p>Aber...</p>
<p><code>data[size]</code> wird erstmal zu <code>*(data + size)</code> .<br />
D.h. als erstes kommt mal der Array-to-Pointer decay von &quot;data&quot;, und danach die Addition. Beides noch unproblematisch. Danach kommt der böse *.</p>
<p>Nur das Ergebnis davon ist erstmal noch ne Lvalue (vom Typ <code>T&amp;</code> wenn ich nicht ganz daneben liege). In <code>&amp;data[size]</code> holen wir uns dann die Adresse von dieser Lvalue.</p>
<p>Die Frage ist also: dürfen wir auch Lvalue-Referenzen auf &quot;one past (the) last element&quot; erzeugen? Ich sehe keinen Grund der dagegen spricht, also behaupte ich einfach mal: ja, dürfen wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>EDIT:<br />
Hier auch zum gleichen Thema:<br />
<a href="http://stackoverflow.com/questions/988158/take-the-address-of-a-one-past-the-end-array-element-via-subscript-legal-by-the" rel="nofollow">http://stackoverflow.com/questions/988158/take-the-address-of-a-one-past-the-end-array-element-via-subscript-legal-by-the</a><br />
Siehe Antwort von Adam Rosenfield, Zitat aus §6.5.3.2, paragraph 3</p>
<blockquote>
<p>The unary &amp; operator yields the address of its operand. If the operand has type ‘‘type’’, the result has type ‘‘pointer to type’’. If the operand is the result of a unary * operator, neither that operator nor the &amp; operator is evaluated and the result is as if both were omitted, except that the constraints on the operators still apply and the result is not an lvalue. Similarly, <strong>if the operand is the result of a [] operator, neither the &amp; operator nor the unary * that is implied by the [] is evaluated and the result is as if the &amp; operator were removed and the [] operator were changed to a + operator.</strong> Otherwise, the result is a pointer to the object or function designated by its operand.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2180824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180824</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 13 Feb 2012 23:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 23:33:31 GMT]]></title><description><![CDATA[<p>Caligulaminus schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>[..]der Standard sagt, dass man keine ungültigen Adressen erzeugen oder rumreichen darf.[..]<br />
[..]grosse dicke Ausnahme[..]<br />
[..]man darf die Adresse des &quot;one past last element&quot; erzeugen und auch rumreichen.[..]</p>
</blockquote>
<p>Hmmm... elegant is dann aber doch anders. Naja - gewachsene Systeme halt...</p>
</blockquote>
<p>Sagen wir einfach mal es ist praktisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180827</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180827</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 13 Feb 2012 23:33:31 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 23:42:11 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>[..]kann er auch die Adresse von Barack Obama berechnen[..]</p>
</blockquote>
<p>Oder die meines Nachbarn...</p>
<p>Meine Aussage ist: es wird nichts &quot;ausgewertet&quot; (i.e. dereferenziert) sondern nur die Adresse meines Nachbarn errechnet. Es findet also nichts gefährliches oder aufwendiges statt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180830</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 13 Feb 2012 23:42:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 23:44:34 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Sagen wir einfach mal es ist praktisch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p><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/2180832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180832</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 13 Feb 2012 23:44:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Mon, 13 Feb 2012 23:52:29 GMT]]></title><description><![CDATA[<p>Caligulaminus schrieb:</p>
<blockquote>
<p>Michael E. schrieb:</p>
<blockquote>
<p>[..]kann er auch die Adresse von Barack Obama berechnen[..]</p>
</blockquote>
<p>Oder die meines Nachbarn...</p>
<p>Meine Aussage ist: es wird nichts &quot;ausgewertet&quot; (i.e. dereferenziert) sondern nur die Adresse meines Nachbarn errechnet. Es findet also nichts gefährliches oder aufwendiges statt.</p>
</blockquote>
<p>Man kann wohl schwer mit nicht-standard Vokabular argumentieren, was der Standard als UB definiert oder nicht.</p>
<p>Das da ist z.B. UB:</p>
<pre><code class="language-cpp">void foo()
{
    int* p = new int; // OK
    int* p2; // OK
    delete p; // OK
    p2 = p; // BAM, oida - UB!
}
</code></pre>
<p>Das da IMO auch:</p>
<pre><code class="language-cpp">void bar()
{
    int* p; // OK
    int* p2 = p; // BIG BADABOOM, UB!
}
</code></pre>
<p>Nach deiner Argumentation dürfte in beiden Fällen nix passieren.<br />
Laut Standard ist trotzdem beides UB, da man nur Zeigerwerte auf gültige Objekte (bzw. wieder mit der &quot;one past last&quot; Ausnahme) rumreichen darf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180836</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 13 Feb 2012 23:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Tue, 14 Feb 2012 00:02:57 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<blockquote>
<p>The unary &amp; operator yields the address of its operand. If the operand has type ‘‘type’’, the result has type ‘‘pointer to type’’. If the operand is the result of a unary * operator, neither that operator nor the &amp; operator is evaluated and the result is as if both were omitted, except that the constraints on the operators still apply and the result is not an lvalue. Similarly, <strong>if the operand is the result of a [] operator, neither the &amp; operator nor the unary * that is implied by the [] is evaluated and the result is as if the &amp; operator were removed and the [] operator were changed to a + operator.</strong> Otherwise, the result is a pointer to the object or function designated by its operand.</p>
</blockquote>
</blockquote>
<p>Klingt stichhaltig für C (auch wenn ich aus dem &quot;except that the constraints on the operators still apply&quot; noch nicht so ganz schlau werde). Wahrscheinlich kann man davon ausgehen, dass es dann in C++ ebenso legal ist. Danke für die Recherche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180841</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 14 Feb 2012 00:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Tue, 14 Feb 2012 00:13:16 GMT]]></title><description><![CDATA[<p>Oops, mir ist gar nicht aufgefallen dass das aus dem C99 Standard und nicht dem C++ Standard ist. Hihi. War keine Absicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180842</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 14 Feb 2012 00:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Tue, 14 Feb 2012 00:13:44 GMT]]></title><description><![CDATA[<p>Ist hustbaer Österreicher(Wiener?)? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180843</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 14 Feb 2012 00:13:44 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu Arrays on Tue, 14 Feb 2012 00:27:50 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Ist hustbaer Österreicher(Wiener?)? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Österreicher ja, Wiener nein.<br />
Wieso, wegen des &quot;BAM, oida&quot;? Das schreib ich nur weil ich es witzig finde, bin aber kein angehöriger der Gruppe die sich neuerdings als &quot;Krocha&quot; bezeichnet (früher auch als &quot;Dumme Proleten&quot; bekannt - k.A. wieso die nen neuen Namen erfinden mussten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    />).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2180846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2180846</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 14 Feb 2012 00:27:50 GMT</pubDate></item></channel></rss>