<?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 delete[]]]></title><description><![CDATA[<p>Dynamisch erzeugte Arrays gibt man bekanntlich min delete[] frei. Z.B.:</p>
<pre><code class="language-cpp">int *array = new int[10];
...
delete[] array;
</code></pre>
<p>Aber: woher weiß delete[], wie viel Speicherplatz freigegeben werden muss???</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/201881/frage-zu-delete</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 12:12:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/201881.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Jan 2008 12:35:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu delete[] on Sat, 05 Jan 2008 12:35:25 GMT]]></title><description><![CDATA[<p>Dynamisch erzeugte Arrays gibt man bekanntlich min delete[] frei. Z.B.:</p>
<pre><code class="language-cpp">int *array = new int[10];
...
delete[] array;
</code></pre>
<p>Aber: woher weiß delete[], wie viel Speicherplatz freigegeben werden muss???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431055</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sat, 05 Jan 2008 12:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sat, 05 Jan 2008 13:48:37 GMT]]></title><description><![CDATA[<p>das ist betriebssystem abhängig. Delete ruft ja auch nur eine Funktion des Betriebssystems auf und sagt: &quot;lösch mal den Speicherbereich der hier beginnt&quot;. Vielleicht schaut dann das Bs in einer Tabelle nach, oder hat direkt vor dem Speicherbereich die Größe gespeichert. Gibt sicher noch mehr Möglichkeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431118</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sat, 05 Jan 2008 13:48:37 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sat, 05 Jan 2008 18:23:04 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wenn du mit new[] ein Feld anlegst wird die Feldgroesse mit gespeichert.<br />
Hier kurz ein Auszug dazu aus &quot;Die C++-Programmiersprache&quot; von Stroustrup.</p>
<blockquote>
<p>Um von <em>new</em> belegten Speicher freizugeben, muessen <em>new</em> und <em>new[]</em> die Groesse des angelegten Objektes ermitteln koennen. Dies bedingt, dass ein mit der Standardimplementierung von <em>new</em> angelegtes Objekt etwas mehr Speicher als ein statisches Objekt belegt. Ueblicherweise wird ein Wort benutzt, um die Groesse des Objektes abzulegen.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1431332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431332</guid><dc:creator><![CDATA[Kohma]]></dc:creator><pubDate>Sat, 05 Jan 2008 18:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 14:49:30 GMT]]></title><description><![CDATA[<p>Ok, vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431833</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Sun, 06 Jan 2008 14:49:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 16:46:03 GMT]]></title><description><![CDATA[<p>Lügt mein Buch wenn es behauptet, dass es völlig egal ist ob man Arrays mit</p>
<pre><code class="language-cpp">delete[] array;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">delete array;
</code></pre>
<p>freigibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431923</guid><dc:creator><![CDATA[mahe]]></dc:creator><pubDate>Sun, 06 Jan 2008 16:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 17:10:35 GMT]]></title><description><![CDATA[<p>Ja das ist Schwachsinn und führt mit ziemlicher Sicherheit zu Memory Leaks</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431942</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sun, 06 Jan 2008 17:10:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 17:23:00 GMT]]></title><description><![CDATA[<p>mahe schrieb:</p>
<blockquote>
<p>Lügt mein Buch wenn es behauptet, dass es völlig egal ist ob man Arrays mit</p>
<pre><code class="language-cpp">delete[] array;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">delete array;
</code></pre>
<p>freigibt?</p>
</blockquote>
<p>Wie heißt denn das Buch? Das sollte man ja möglichst meiden (bzw. nicht weiterempfehlen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431949</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 06 Jan 2008 17:23:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 17:56:46 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int* arr = new int[10];
delete arr;
</code></pre>
<p>ist schlichtweg undefiniertes verhalten und auchnicht, wie man vllt denken könnte, das das 1. Element aus dem Array gelöscht wird. Undefiniert.</p>
<pre><code class="language-cpp">int* arr = new int(0);
delete [] arr;
</code></pre>
<p>Auch hier undefiniertes Verhalten.<br />
Laut Standard <strong>muss</strong> Speicher, der mit new angelegt wurde, mit delete gelöscht werden und Speicher, der mit new[] angelegt wurde, mit delete[] gelöscht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1431975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1431975</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 06 Jan 2008 17:56:46 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 20:01:39 GMT]]></title><description><![CDATA[<p>was ich auch ganz interessant finde:<br />
der Standard garantiert das <em>delete</em> keine Pointer auf 0 loescht. Also kein ueberprufen ala</p>
<pre><code class="language-cpp">if( pointer != 0 )
    delete pointer;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1432083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432083</guid><dc:creator><![CDATA[Kohma]]></dc:creator><pubDate>Sun, 06 Jan 2008 20:01:39 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 20:14:10 GMT]]></title><description><![CDATA[<p>Ich denke mal, dass nicht das Freigeben des Speichers das Problem beim Vertauschen von <em>delete</em> und <em>delete[]</em> ist, sondern dass bei ersterem nur der Destruktor des ersten Elements aufgerufen wird und nicht von allen Elementen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432085</guid><dc:creator><![CDATA[__Stefan__]]></dc:creator><pubDate>Sun, 06 Jan 2008 20:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 20:21:07 GMT]]></title><description><![CDATA[<p><strong>Stefan</strong> schrieb:</p>
<blockquote>
<p>Ich denke mal, dass nicht das Freigeben des Speichers das Problem beim Vertauschen von <em>delete</em> und <em>delete[]</em> ist, sondern dass bei ersterem nur der Destruktor des ersten Elements aufgerufen wird und nicht von allen Elementen.</p>
</blockquote>
<p>Der Standard überlässt es gänzlich der Implementierung, wie diese Mechanismen arbeiten. Folglich sind verschiedene Verhaltensweisen denkbar. Konsequenterweise lässt der Standard dies völlig undefiniert - und das bedeutet für den Programmierer, dass man diese Problematik immer zu vermeiden hat. Gewinnen kann man hier ohnehin nichts und das spezielle Verhalten eines Compilers ist höchtens beim Debuggen von Interesse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432088</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 06 Jan 2008 20:21:07 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 21:20:52 GMT]]></title><description><![CDATA[<p><strong>Stefan</strong> schrieb:</p>
<blockquote>
<p>Ich denke mal, dass nicht das Freigeben des Speichers das Problem beim Vertauschen von <em>delete</em> und <em>delete[]</em> ist, sondern dass bei ersterem nur der Destruktor des ersten Elements aufgerufen wird und nicht von allen Elementen.</p>
</blockquote>
<p>Na, Meyers schreibt hierzu so schon (sinngemäß): „Es ist undefiniert. Das heißt, der Compiler könnte dafür auch Code generieren, der jedes vierte Byte auf der Festplatte überschreibt.“ <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>Kohma schrieb:</p>
<blockquote>
<p>was ich auch ganz interessant finde:<br />
der Standard garantiert das <em>delete</em> keine Pointer auf 0 loescht. Also kein ueberprufen ala</p>
<pre><code class="language-cpp">if( pointer != 0 )
    delete pointer;
</code></pre>
</blockquote>
<p>Das stimmt zwar, allerdings gibt es diese Anforderung nicht für eigene Überladungen von 'operator delete'. D.h. es wäre durchaus eine eigene Version denkbar, die *keinen* Spezialfall für einen Nullzeiger macht, sodass obiger Prüfcode sehr wohl nötig werden kann (wobei ich nicht denke, dass es einen sinnvollen Anwendungsfall für solch eine Überladung gibt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432116</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 06 Jan 2008 21:20:52 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 22:32:30 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Das stimmt zwar, allerdings gibt es diese Anforderung nicht für eigene Überladungen von 'operator delete'.</p>
</blockquote>
<p>Das stimmt zwar, allerdings gibt es große Steine mit denen man dem Programmierer den Schädel zertrümmern kann, wenn sein delete diese Anforderung nicht erfüllt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432138</guid><dc:creator><![CDATA[jehova]]></dc:creator><pubDate>Sun, 06 Jan 2008 22:32:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 22:51:59 GMT]]></title><description><![CDATA[<p>Lol,</p>
<p>ihr habt ja recht! Wenn ich sowas schreibe sollte ich auch soweit denken und auf sowas hinweisen <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/1432148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432148</guid><dc:creator><![CDATA[Kohma]]></dc:creator><pubDate>Sun, 06 Jan 2008 22:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Sun, 06 Jan 2008 23:00:16 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Kohma schrieb:</p>
<blockquote>
<p>was ich auch ganz interessant finde:<br />
der Standard garantiert das <em>delete</em> keine Pointer auf 0 loescht. Also kein ueberprufen ala</p>
<pre><code class="language-cpp">if( pointer != 0 )
    delete pointer;
</code></pre>
</blockquote>
<p>Das stimmt zwar, allerdings gibt es diese Anforderung nicht für eigene Überladungen von 'operator delete'. D.h. es wäre durchaus eine eigene Version denkbar, die *keinen* Spezialfall für einen Nullzeiger macht, sodass obiger Prüfcode sehr wohl nötig werden kann (wobei ich nicht denke, dass es einen sinnvollen Anwendungsfall für solch eine Überladung gibt).</p>
</blockquote>
<p>Es gibt da diesen merkwürdigen Satz in 5.3.5/2</p>
<blockquote>
<p>In either alternative, if the value of the operand of delete is the null pointer the operation has no effect.</p>
</blockquote>
<p>Gemeint sind die Alternativen von non-Array- und Array-delete. iirc wird die Formulierung im nächsten Standard verbessert werden. Die Anwendung des delete-Operators soll stets möglich sein - Das ist jedenfalls die Absicht des Standardkomitees unabhängig von der etwas mehrdeutigen Formulierung (man beachte: 5.3.5/7: The delete-expression will call a deallocation function (3.7.3.2). Der Aufruf einer potentiell durch den Nutzer bereitgestellten Funktion wird durch &quot;has no effect&quot; kaum adäquat beschrieben. Oder soll dieser Satz bei Null-Pointern nicht gelten? Dann hätte man den Abschnitt systematisch anders aufbauen sollen.).<br />
Ich habe in der Vergangenheit etwas anderes geschrieben - aber 80% ist sowieso immer falsch. Nachdenken ist ohnehin wichtiger als die Produktion zitierfähigen Materials.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1432153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432153</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 06 Jan 2008 23:00:16 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu delete[] on Mon, 07 Jan 2008 10:28:59 GMT]]></title><description><![CDATA[<p>jehova schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Das stimmt zwar, allerdings gibt es diese Anforderung nicht für eigene Überladungen von 'operator delete'.</p>
</blockquote>
<p>Das stimmt zwar, allerdings gibt es große Steine mit denen man dem Programmierer den Schädel zertrümmern kann, wenn sein delete diese Anforderung nicht erfüllt.</p>
</blockquote>
<p>Gut geantwortet. <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/1432266</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1432266</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Mon, 07 Jan 2008 10:28:59 GMT</pubDate></item></channel></rss>