<?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[delete]]></title><description><![CDATA[<p>Waas ist der Unterschied zwischen delete un delete[] ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161352/delete</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 20:56:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161352.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Oct 2006 18:19:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to delete on Thu, 05 Oct 2006 18:19:34 GMT]]></title><description><![CDATA[<p>Waas ist der Unterschied zwischen delete un delete[] ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150116</guid><dc:creator><![CDATA[Gerber]]></dc:creator><pubDate>Thu, 05 Oct 2006 18:19:34 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Thu, 05 Oct 2006 18:31:29 GMT]]></title><description><![CDATA[<p>Was ist der Unterschied zwischen *<em>int <em>foo = new int;</em></em> und <strong>int *foo = new int[bar];</strong>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150126</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 05 Oct 2006 18:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Thu, 05 Oct 2006 18:46:07 GMT]]></title><description><![CDATA[<p>TactX schrieb:</p>
<blockquote>
<p>Was ist der Unterschied zwischen *<em>int <em>foo = new int;</em></em> und <strong>int *foo = new int[bar];</strong>?</p>
</blockquote>
<p>Hi,<br />
damit wollte dich TactX wohl auf Arrays aufmerksam machen <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>Beispiel:</p>
<pre><code class="language-cpp">int *single_pointer = new int;
   //... mach was damit ...
   delete single_pointer;

   int *pointer_array = new int[10];
   //... mach was mit den Pointern ...
   delete [] pointer_array;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1150136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150136</guid><dc:creator><![CDATA[nucknuck]]></dc:creator><pubDate>Thu, 05 Oct 2006 18:46:07 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Thu, 05 Oct 2006 18:50:55 GMT]]></title><description><![CDATA[<p>bei 'nem array aus int's sollte das egal sein. nur wenn man c++ objekte mit 'new' erzeugt spielt das '[]' 'ne rolle, damit auch alle destruktoren aufgerufen werden.<br />
btw: bitte berichtigt mich c++ -noob, falls das falsch ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150140</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Thu, 05 Oct 2006 18:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Thu, 05 Oct 2006 19:00:57 GMT]]></title><description><![CDATA[<p>Es sollte eigentlich nicht egal sein.<br />
Mit</p>
<pre><code class="language-cpp">delete array_pointer;
</code></pre>
<p>wird nur der erste Pointer freigegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150148</guid><dc:creator><![CDATA[nucknuck]]></dc:creator><pubDate>Thu, 05 Oct 2006 19:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Thu, 05 Oct 2006 19:13:48 GMT]]></title><description><![CDATA[<p>ich mag mich täuschen, aber als c-coder (mit wenig ++ erfahrung) glaube ich dass:</p>
<pre><code>int *a = new int;
int *b = new int[1000];
delete a; // ok
delete b; // offensichtlich falsch aber geht trotzdem
</code></pre>
<p>gehen sollte...</p>
<p>aber tun' sollte man wowas natürlich trotzdem nicht <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/1150160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150160</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Thu, 05 Oct 2006 19:13:48 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Thu, 05 Oct 2006 19:31:54 GMT]]></title><description><![CDATA[<p>Wenn die Implementierung von new und delete auf malloc und free zurückgreift, ist es für triviale Objekte wohl tatsächlich egal, da man bei free auch nur den Zeiger und nicht dessen Größe zum freigeben braucht.</p>
<p>Aber: Der Standard macht dieses Zugeständnis nicht, so dass dieses Verfahren dann nicht mehr portabel ist.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12317">@nucknuck</a>:<br />
Ein &quot;falsches&quot; delete ist imho schlicht und ergreifend als undefiniert anzusehen. Nur den &quot;ersten&quot; Pointer freizugeben (wobei das im Grunde nicht stimmt, denn es gibt nur einen Pointer auf einen zusammenhängenden Block mehrerer ints) dürften die wenigsten Freispeicherverwaltungen unterstützen <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/1150178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150178</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 05 Oct 2006 19:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Thu, 05 Oct 2006 19:34:52 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Freispeicherverwaltungen</p>
</blockquote>
<p>was für ein wort <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/1150180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150180</guid><dc:creator><![CDATA[net 0]]></dc:creator><pubDate>Thu, 05 Oct 2006 19:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Fri, 06 Oct 2006 08:56:24 GMT]]></title><description><![CDATA[<p>eigentlich isses ja einfach zu erklaeren</p>
<p>// reserviert speicher fuer 1xint<br />
int *a = new int;</p>
<p>// reserviert speicher fuer 3xint<br />
int *b = new int[3];</p>
<p>//nu schreibt man die werte voll in a die 1 und in b 1, 2 und 3<br />
//nu wieder freigeben</p>
<p>// den speicherbereich des ersten (und in diesen fall einzigsten] bereich freigeben<br />
delete a;</p>
<p>// falsch, denn man loescht nur den anfang, also die 1, aber 2 und 3 bleibt unbenutzt im speicher rumliegen<br />
//delete b;</p>
<p>// darum mit [] damit man sagt &quot;gib alle reservierten bereiche frei&quot;<br />
delete[] b;</p>
<p>//am bestem am ende noch;<br />
a = NULL;<br />
b = NULL;</p>
<pre><code class="language-cpp">int *a = new int;
int *b = new int[300];
// fuellen blablubb
if( a != NULL ){
    delete a;
    a = NULL;
}
if( b != NULL ){
    delete[] b;
    b = NULL;
}
</code></pre>
<p>die &quot;ifs&quot; sind einfach nur - fals man durch bloede zufaelle wegen diversen ablaeufen den zeiger schon geloescht hat</p>
<p>auch fuer die zugriffe sollte man sagen</p>
<p>if( pointer != NULL )<br />
oder<br />
if( pointer == NULL ) return - je nachdem, damit man immer mit gueltigen pointern arbeitet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150375</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Fri, 06 Oct 2006 08:56:24 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Fri, 06 Oct 2006 08:59:45 GMT]]></title><description><![CDATA[<p>Mr Evil schrieb:</p>
<blockquote>
<p>die &quot;ifs&quot; sind einfach nur - fals man durch bloede zufaelle wegen diversen ablaeufen den zeiger schon geloescht hat</p>
</blockquote>
<p>Die if()s sind vor allem unnötig (delete auf einen NULL-Zeiger ist erlaubt und macht gar nichts) und täuschen eine nicht vorhandene Sicherheit vor (wenn jemand anderes deinen Scpeicher freigegeben hat, bekommst du gar nichts davon mit - insbesondere werden auch fremde Pointer, die dorthin zeigen, nicht zurückgesetzt).</p>
<p>PS: Im Magazin findet ihr einen Artikel über Speicherverwaltung - wen's interessiert, der soll da mal reinschauen <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/1150380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150380</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 06 Oct 2006 08:59:45 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Fri, 06 Oct 2006 09:21:59 GMT]]></title><description><![CDATA[<p>Mr Evil schrieb:</p>
<blockquote>
<p>// falsch, denn man loescht nur den anfang, also die 1, aber 2 und 3 bleibt unbenutzt im speicher rumliegen<br />
//delete b;</p>
</blockquote>
<p>Wie schon geschrieben Implementationsabhängig - und den Anfang eines zusammenhängenden Blocks freigeben kann imho keine gängige Speicherverwaltung - vom Gegenteil möge man mich überzeugen.</p>
<p>Jedenfalls bleibt in keiner mir bekannten Umgebung der hintere Teil eines Blockes &quot;unbenutzt im Speicher&quot;.</p>
<p>Anyway, einigen wir uns doch einfach drauf dass das undefiniert ist. <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/1150402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150402</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 06 Oct 2006 09:21:59 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Fri, 06 Oct 2006 10:23:40 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Jedenfalls bleibt in keiner mir bekannten Umgebung der hintere Teil eines Blockes &quot;unbenutzt im Speicher&quot;.</p>
</blockquote>
<p>ich kann mich zwar taeuschen, aber wenn ich beim debuggen mir anschau was im speicher steht {window-&gt;memory1} und das delete ohne den [] mach - wird nur das erste geloescht, aber der rest bleibt drinne</p>
<p>gleich nochmal ausprobieren #gg</p>
<p>//dazuedit</p>
<p>getestet hab</p>
<pre><code class="language-cpp">int _tmain(int argc, _TCHAR* argv[])
{
	int *a = new int;
	*a = 1;
	delete a;
	a = NULL;

	int *b = new int[3];
	*b = 1;
	*(b+1) = 2;
	*(b+2) = 3;
	delete b;
	b = NULL;

	return 0;
}
</code></pre>
<p>ich werd nich mehr - der speicher ist ja wirklich komplett geleert ohne dem [] - meine welt stuerzt grad in sich zusammen #gg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150454</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Fri, 06 Oct 2006 10:23:40 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Fri, 06 Oct 2006 18:38:37 GMT]]></title><description><![CDATA[<p>Ich würde auf solche Spielchen trotzdem nicht eingehen. Der Standard definiert ganz klar, dass zu new delete gehört, und zu new[] delete[]. Alles andere ist nicht definiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150789</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 06 Oct 2006 18:38:37 GMT</pubDate></item><item><title><![CDATA[Reply to delete on Fri, 06 Oct 2006 19:13:17 GMT]]></title><description><![CDATA[<p>Mr Evil schrieb:</p>
<blockquote>
<p>...wenn ich beim debuggen mir anschau was im speicher steht ...</p>
</blockquote>
<p>Was Dir groovemaster aber sagen will: Das mag gut sein, aber es kann bei anderen Compileoptionen, der nächsten Compilerversion, einem anderen Compiler/Betriebssystem/Tagesstimmung der Runtimelib, .... gaaaanz anders sein.<br />
Ergo: Du kannst Dich nicht drauf verlassen.... und solltest es deswegen lieber nicht.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1150805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1150805</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 06 Oct 2006 19:13:17 GMT</pubDate></item></channel></rss>