<?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[Was passiert bei XXX *p =new XXX[0]; ?]]></title><description><![CDATA[<p>was passiert wenn ich ein arry mit 0 elemente anlegen würde?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176525/was-passiert-bei-xxx-p-new-xxx-0</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 13:44:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176525.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Mar 2007 08:14:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 08:14:02 GMT]]></title><description><![CDATA[<p>was passiert wenn ich ein arry mit 0 elemente anlegen würde?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250230</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Thu, 22 Mar 2007 08:14:02 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 08:28:09 GMT]]></title><description><![CDATA[<p>Probier's doch aus <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>
<p>(afaik ist nicht definiert, was dabei herauskommt, wenn du Platz für 0 Elemente anforderst, aber auf keinen Fall bekommst du genug Speicherplatz, um damit vernünftig arbeiten zu können)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250235</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 22 Mar 2007 08:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 08:33:17 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ist das nicht sogar durch den Standard verboten ? Ich meinte, da mal so eine Technik gesehen zu haben (zur Umsetzung von Typanforderungen an templlate-Argumente), die darauf basierte ... bin mir aber nicht ganz sicher.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250239</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 08:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 09:40:55 GMT]]></title><description><![CDATA[<p>Du bekommst einen Pointer auf ein Array der Größe 0. Das darf kein Nullpointer sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250300</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Thu, 22 Mar 2007 09:40:55 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 15:04:04 GMT]]></title><description><![CDATA[<p>also ich kann so etwas noch nicht einmal kompilieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250557</guid><dc:creator><![CDATA[piXelshooter]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:04:04 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 15:11:09 GMT]]></title><description><![CDATA[<p>ich hatte in einem Programm mal folgenden Code:</p>
<pre><code class="language-cpp">VertexBuffer = new Vertex[numOfVertices];
</code></pre>
<p>und davor keine Überprüfung ob numOfVertices &gt; 0 ist. Ist numOfVertices == 0 hat es auch funktioniert ohne Probleme - benutzt hab ich dazu MSVC 2005</p>
<p>ich meine gelesen zu haben was Bashar schon gesagt hat: &quot;Du bekommst einen Pointer auf ein Array der Größe 0. Das darf kein Nullpointer sein.&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250563</guid><dc:creator><![CDATA[Vertexwahn]]></dc:creator><pubDate>Thu, 22 Mar 2007 15:11:09 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 16:48:29 GMT]]></title><description><![CDATA[<p>Genau, du bekommst einen Pointer. Das einzige was du mit dem machen darfst ist seinen Wert zu verwenden (muss AFAIK eindeutig sein), und ihn mittels &quot;delete []&quot; wieder freigeben. Dereferenzieren darfst du ihn auf jeden Fall nicht. Erlaubt ist es aber.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250657</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250657</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 16:57:14 GMT]]></title><description><![CDATA[<p>HI,</p>
<p>ja, mir ist gerade aufgefallen, dass in &quot;meinem Beispiel&quot; der Fall ein wenig anders gelagert war, da dort Stackarrays verwendet wurden:</p>
<pre><code class="language-cpp">int a[0];
</code></pre>
<p>... und IIRC führt das zu einem compile-Fehler.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250661</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 22 Mar 2007 16:57:14 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Thu, 22 Mar 2007 21:35:42 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>ja, mir ist gerade aufgefallen, dass in &quot;meinem Beispiel&quot; der Fall ein wenig anders gelagert war, da dort Stackarrays verwendet wurden:</p>
<pre><code class="language-cpp">int a[0];
</code></pre>
<p>... und IIRC führt das zu einem compile-Fehler.</p>
</blockquote>
<p>Korrekt. In Standard-C++ sind solche (also nicht mit new erzeugte) &quot;zero-sized&quot;-Arrays nicht erlaubt. Sie sind aber eine sehr sinnvolle (low-level)-Erweiterung, die nahezu jeder Compiler bietet. Für gewöhnlich setzt man solche Arrays ein, wenn man Strukturen mit einer variablen (dynamisch festgelegten) Größe benötigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250858</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Thu, 22 Mar 2007 21:35:42 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Fri, 23 Mar 2007 02:31:25 GMT]]></title><description><![CDATA[<p>Naja, meistens tuts es auch wenn man statt [0] einfach [1] nimmt <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/1250898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250898</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 Mar 2007 02:31:25 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Fri, 23 Mar 2007 08:22:40 GMT]]></title><description><![CDATA[<p>HumeSikkins schrieb:</p>
<blockquote>
<p>Für gewöhnlich setzt man solche Arrays ein, wenn man Strukturen mit einer variablen (dynamisch festgelegten) Größe benötigt.</p>
</blockquote>
<p>Was meinst Du damit genau? Geht es einfach nur darum den Sonderfall Größe 0 durch den normalen Codepath mit abzudecken? Oder steckt da was tieferes dahinter?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250950</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Fri, 23 Mar 2007 08:22:40 GMT</pubDate></item><item><title><![CDATA[Reply to Was passiert bei XXX *p =new XXX[0]; ? on Fri, 23 Mar 2007 08:40:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/324">@Jester</a><br />
Ich meine damit sowas:</p>
<pre><code class="language-cpp">struct Foo {
  unsigned size_;
  Type data_[0];
};

int main() {
   // Note: sizeof(Foo) is typically == sizeof(size_)
   unsigned s = readSize();
   void* p = operator new(sizeof(Foo) + s * sizeof(T));
   Foo* f = new (p) Foo;
   readData(f);
   for (unsigned i = 0; i &lt; f-&gt;size_; ++i) {
      doSomething(f-&gt;data_[i]);
   }

}
</code></pre>
<p>Vorteil: nur eine new-Allokation und bessere Cache-Effizienz bei Zugriff auf Foo, da &quot;Header&quot; und Daten in einem sequentiellen Speicherbereich liegen. Aber wie gesagt: das ist eine Low-Level-Optimierung.</p>
<blockquote>
<p>Naja, meistens tuts es auch wenn man statt [0] einfach [1] nimmt</p>
</blockquote>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox272873" checked="true" /><label for="checkbox272873">für x &gt; 0 undefiniertes Verhalten. Dieses theoretische Problem wird bei Compilern, die ein buffer-overrun-check nutzen zu einem praktischen. Dieses Problem tritt bei arr[0] nicht auf, da es sich hier sowieso um eine nicht-konforme Compiler-Erweiterung handelt.</label></div></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1250961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1250961</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Fri, 23 Mar 2007 08:40:19 GMT</pubDate></item></channel></rss>