<?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[nicht sicher bei delete]]></title><description><![CDATA[<p>hi, ich probier gerad mit dynamischen mehrdimensionalen Arrays ein wenig herum und wollte den Speicher für die 2. Dimension, der ja oft grösser ist als bei der 1., zusammenfassen und nicht jede zweite Dimension einzeln einer ersten zuweisen. Dabei bin mir nicht so sicher, ob ich hier den Speicher wieder richtig freigebe:</p>
<pre><code class="language-cpp">//ein Batzen Speicher für beide Dimensionen
long* mem  = new long[dim1*dim2];
memset(mem, 0, dim1*dim2*sizeof(long));

//Speicher virtuelle erste Dimension
long** ptrmem = new long*[dim1];

//Dim1 Adressen aus Batzen zuweisen
int i = 0;
for(;i&lt;dim1;++i)
   ptrmem[i] = &amp;mem[i*dim2];
//test ptrmem[x][y] = 10;

//alles wieder löschen
//is das überhaupt nötig, hier auf
//NULL zu setzen?
for(i = 0;i&lt;DIM1;++i) 
   ptrmem[i] = NULL;
//auch hier bin ich mir nicht sicher
//ob del[] oder del
delete ptrmem;
ptrmem = NULL;
delete[] mem;
mem = NULL;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/187870/nicht-sicher-bei-delete</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 23:21:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/187870.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 24 Jul 2007 23:13:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to nicht sicher bei delete on Tue, 24 Jul 2007 23:13:44 GMT]]></title><description><![CDATA[<p>hi, ich probier gerad mit dynamischen mehrdimensionalen Arrays ein wenig herum und wollte den Speicher für die 2. Dimension, der ja oft grösser ist als bei der 1., zusammenfassen und nicht jede zweite Dimension einzeln einer ersten zuweisen. Dabei bin mir nicht so sicher, ob ich hier den Speicher wieder richtig freigebe:</p>
<pre><code class="language-cpp">//ein Batzen Speicher für beide Dimensionen
long* mem  = new long[dim1*dim2];
memset(mem, 0, dim1*dim2*sizeof(long));

//Speicher virtuelle erste Dimension
long** ptrmem = new long*[dim1];

//Dim1 Adressen aus Batzen zuweisen
int i = 0;
for(;i&lt;dim1;++i)
   ptrmem[i] = &amp;mem[i*dim2];
//test ptrmem[x][y] = 10;

//alles wieder löschen
//is das überhaupt nötig, hier auf
//NULL zu setzen?
for(i = 0;i&lt;DIM1;++i) 
   ptrmem[i] = NULL;
//auch hier bin ich mir nicht sicher
//ob del[] oder del
delete ptrmem;
ptrmem = NULL;
delete[] mem;
mem = NULL;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1331923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1331923</guid><dc:creator><![CDATA[chris19]]></dc:creator><pubDate>Tue, 24 Jul 2007 23:13:44 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 00:14:27 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//alles wieder löschen
//is das überhaupt nötig, hier auf
//NULL zu setzen?
for(i = 0;i&lt;DIM1;++i)
   ptrmem[i] = NULL;
</code></pre>
<p>Das ist eigentlich vollkommen unnötig und überflüssig, weil du den ganzen Speicher ja eh wieder freigibst und dann das Betriebssystem da dann ganz andere Werte als NULL reinschreiben kann.</p>
<pre><code class="language-cpp">//auch hier bin ich mir nicht sicher
//ob del[] oder del
delete ptrmem;
ptrmem = NULL;
delete[] mem;
mem = NULL;
</code></pre>
<p>Hmmm, theoretisch genügt meiner Meinung nach ein &quot;normales&quot; delete. delete[] unterscheidet sich ja nur darin vom &quot;normalen&quot; delete, dass delete[] für jedes Objekt des Arrays den Destruktor aufruft, während das &quot;normale&quot; delete nur für das erste Objekt des Arrays den Destruktor aufruft. Beide Operatoren sollten aber den gleichen Speicherbereich wieder freigeben, und da du in deinem Beispiel nur mit elementaren Datentypen hantierst (die an sich keinen Konstruktor bzw. Destruktor haben), reicht theoretisch das &quot;normale&quot; delete.</p>
<p>Allerdings heißt ja &quot;genügen&quot; nicht, dass man es nicht anders machen sollte. Ich persönlich würde auf jeden Fall ein delete[] verwenden, damit es im Quelltext offensichtlich wird, dass du Speicherplatz für ein Array freigibst und damit, falls du irgendwann mal den Datentyp des Arrays beim Umschreiben des Quelltextes ändern solltest, nicht vergisst beim delete die eckigen Klammern zu setzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1331935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1331935</guid><dc:creator><![CDATA[Paul Panther]]></dc:creator><pubDate>Wed, 25 Jul 2007 00:14:27 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 06:07:29 GMT]]></title><description><![CDATA[<p>Paul Panther schrieb:</p>
<blockquote>
<p>Hmmm, theoretisch genügt meiner Meinung nach ein &quot;normales&quot; delete. delete[] unterscheidet sich ja nur darin vom &quot;normalen&quot; delete, dass delete[] für jedes Objekt des Arrays den Destruktor aufruft, während das &quot;normale&quot; delete nur für das erste Objekt des Arrays den Destruktor aufruft. Beide Operatoren sollten aber den gleichen Speicherbereich wieder freigeben, und da du in deinem Beispiel nur mit elementaren Datentypen hantierst (die an sich keinen Konstruktor bzw. Destruktor haben), reicht theoretisch das &quot;normale&quot; delete.</p>
</blockquote>
<p>Falsch. Alles, was mit new[] angelegt wurde, <strong>muß</strong> mit delete[] wieder freigegeben werden - alle Versuche, new/delete und new[]/delete[] zu mischen, wären nicht portabel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1331973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1331973</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 25 Jul 2007 06:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 06:17:14 GMT]]></title><description><![CDATA[<p>Die Deletes sehen schon gut aus, als Steigerung bietet es sich nun an dieses Array in eine Klasse zu kapseln und so ein &quot;Intelligenten Zeiger&quot; zu basteln - wo du im Destruktor dann alles nötige zerstörst.</p>
<p>BTW, um alles auf null zu setzen gibt’s die nette Funktion &quot;SecureZeroMemory&quot; da brauchst du keine Schleife.<br />
(Aber für deine zwecke in dem Beispiel brauchst du nichts auf NULL setzen wie mein Vorredner schon anmerkte.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1331977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1331977</guid><dc:creator><![CDATA[EXDW]]></dc:creator><pubDate>Wed, 25 Jul 2007 06:17:14 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 06:44:06 GMT]]></title><description><![CDATA[<p>Mr Evil schrieb:</p>
<blockquote>
<p>BTW, um alles auf null zu setzen gibt’s die nette Funktion &quot;SecureZeroMemory&quot; da brauchst du keine Schleife.</p>
</blockquote>
<p>Wenn schon, dann memset. WinAPI != C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1331983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1331983</guid><dc:creator><![CDATA[pock]]></dc:creator><pubDate>Wed, 25 Jul 2007 06:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 07:16:37 GMT]]></title><description><![CDATA[<p>pock schrieb:</p>
<blockquote>
<p>Mr Evil schrieb:</p>
<blockquote>
<p>BTW, um alles auf null zu setzen gibt’s die nette Funktion &quot;SecureZeroMemory&quot; da brauchst du keine Schleife.</p>
</blockquote>
<p>Wenn schon, dann memset. WinAPI != C++.</p>
</blockquote>
<p>Wenn schon C++, warum dann nicht Sprachmittel?</p>
<pre><code class="language-cpp">long* mem  = new long[dim1*dim2] (); // fertig
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1331994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1331994</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 25 Jul 2007 07:16:37 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 07:31:53 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Wenn schon C++, warum dann nicht Sprachmittel?</p>
</blockquote>
<p>Weil es um diesen Abschnitt geht:</p>
<pre><code>int i = 0;
for(i = 0;i&lt;DIM1;++i)
   ptrmem[i] = NULL;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1332000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332000</guid><dc:creator><![CDATA[pock]]></dc:creator><pubDate>Wed, 25 Jul 2007 07:31:53 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 07:35:19 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<pre><code class="language-cpp">long* mem  = new long[dim1*dim2] (); // fertig
</code></pre>
</blockquote>
<p>Und das schluckt der Compiler? Btw wäre mir neu, daß man bei new[] zusätzlich Ctor-Parameter mitgeben kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332001</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 25 Jul 2007 07:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 07:44:48 GMT]]></title><description><![CDATA[<p>pock schrieb:</p>
<blockquote>
<p>Weil es um diesen Abschnitt geht:</p>
<pre><code>int i = 0;
for(i = 0;i&lt;DIM1;++i)
   ptrmem[i] = NULL;
</code></pre>
</blockquote>
<p>Ist mir schon klar. Der Sinn war ja auch dass dieser Abschnitt unnötig wird.</p>
<p>CStoll schrieb:</p>
<blockquote>
<p>Und das schluckt der Compiler? Btw wäre mir neu, daß man bei new[] zusätzlich Ctor-Parameter mitgeben kann.</p>
</blockquote>
<p>Sind ja auch keine Parameter. IMHO kann man so die Default-Initialisierung für Arrays erzwingen. Wie bei int i(), wonach i garantiert 0 ist.</p>
<p>Das schlucken Comeau, MSVC und GCC, und der MSVC verhält sich auch so dass mit Klammern alle Elemente des Arrays auf 0 gesetzt sind. (Der GCC auch, aber der macht es auch ohne Klammern, beim MSVC steht dann Schrott drin).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332005</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 25 Jul 2007 07:44:48 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 08:20:51 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Ist mir schon klar.</p>
</blockquote>
<p>Ich fürchte nicht.</p>
<blockquote>
<p>Der Sinn war ja auch dass dieser Abschnitt unnötig wird.</p>
</blockquote>
<p>Der Abschnitt wird aber durch dein new[] nicht unnötig. Es geht darum, ein bereits bestehendes Array mit 0 zu füllen. Du beziehst dich auf ein anderes Stück Code als ich.</p>
<pre><code class="language-cpp">//alles wieder löschen
//is das überhaupt nötig, hier auf
//NULL zu setzen?
for(i = 0;i&lt;DIM1;++i)
   ptrmem[i] = NULL;
</code></pre>
<p>Ich sage: es ist nicht nötig, aber wenn mans trotzdem macht ist memset wohl sinnvoller als irgendwelche WinAPI-Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332036</guid><dc:creator><![CDATA[pock]]></dc:creator><pubDate>Wed, 25 Jul 2007 08:20:51 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 08:30:04 GMT]]></title><description><![CDATA[<p>Hast recht, ich war in nem anderen Block.<br />
(Gibt's hier kein Verstecksmiley?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332048</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 25 Jul 2007 08:30:04 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 11:34:35 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Falsch. Alles, was mit new[] angelegt wurde, muß mit delete[] wieder freigegeben werden - alle Versuche, new/delete und new[]/delete[] zu mischen, wären nicht portabel.</p>
</blockquote>
<p>Ist das sicher? Also in meinem Buch und in diesem Tutorial z.B. steht es anders <a href="http://www.cpp-tutor.de/cpp/le11/le11_01.htm#delete" rel="nofollow">http://www.cpp-tutor.de/cpp/le11/le11_01.htm#delete</a></p>
<p>Und zumindest mein Buch, schmückt sich damit standard-konform zu sein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332194</guid><dc:creator><![CDATA[Paul Panther]]></dc:creator><pubDate>Wed, 25 Jul 2007 11:34:35 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 11:46:17 GMT]]></title><description><![CDATA[<p>Paul Panther schrieb:</p>
<blockquote>
<p>Ist das sicher? Also in meinem Buch und in diesem Tutorial z.B. steht es anders <a href="http://www.cpp-tutor.de/cpp/le11/le11_01.htm#delete" rel="nofollow">http://www.cpp-tutor.de/cpp/le11/le11_01.htm#delete</a></p>
</blockquote>
<p>In diesem Tutorial steht exakt das drin, was CStoll auch gesagt hat!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332214</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 25 Jul 2007 11:46:17 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 11:47:22 GMT]]></title><description><![CDATA[<p>Ja, ist sicher:<br />
(ein Zitat aus dem verlinkten Tutorial):</p>
<blockquote>
<p>Wurde dagegen Speicher für ein Feld reserviert, so muss nach dem delete Operator zunächst eine leere eckige Klammer stehen und erst danach der von new zurückgelieferte Zeiger. [...] Vergessen Sie daher niemals die eckigen Klammer beim delete von Feldern.</p>
</blockquote>
<p>In vielen Fällen verwenden new und new[] tatsächlich die selbe Speicherverwaltung, dann macht es nichts aus, daß du die [] weglässt. Aber das ist keineswegs garantiert (schließlich braucht new[] noch zusätzlichen Verwaltungsaufwand, um die Arraygröße zu notieren).</p>
<p>Eine Beispiel-Implementation:</p>
<pre><code class="language-cpp">void* operator new(size_t s)
{
  return malloc(s);
}

void operator delete(void* p)
{
  free(p);
}

void* operator new[](size_t s)
{
  char* p=malloc(s+sizeof(size_t));
  *((int*)p) = s/typesize;//damit beim delete[] nachgesehen werden kann, wieviele Objekte ich löschen muß
  return p+sizeof(size_t);
}

void* operator delete[](void* p)
{
  free((char*)p-sizeof(size_t));
}
</code></pre>
<p>wenn du jetzt einen Zeiger von new[] an delete weitergibst, hast du gute Chancen auf eine Access Violation</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332215</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 25 Jul 2007 11:47:22 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 11:47:29 GMT]]></title><description><![CDATA[<p>Paul Panther schrieb:</p>
<blockquote>
<p>... und in diesem Tutorial z.B. steht es anders <a href="http://www.cpp-tutor.de/cpp/le11/le11_01.htm#delete" rel="nofollow">http://www.cpp-tutor.de/cpp/le11/le11_01.htm#delete</a></p>
</blockquote>
<p>Dann muss sich das Tutorial aber zwischen deinem Post und meinem Lesen geändert haben. Dort steht es genauso wie von CStoll gesagt.</p>
<p>Und ja - das ist sicher. GCC-Executables schmieren dann schon mal gerne mit der Meldung mismatched delete ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332216</guid><dc:creator><![CDATA[7H3 N4C3R]]></dc:creator><pubDate>Wed, 25 Jul 2007 11:47:29 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 11:58:02 GMT]]></title><description><![CDATA[<p>- EDIT: Hat sich erledigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332227</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 25 Jul 2007 11:58:02 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 12:23:24 GMT]]></title><description><![CDATA[<blockquote>
<p>Vergessen Sie diese leere eckige Klammer, so meldet Ihnen der Compiler keinen Fehler! Bei Felder von einfachen Datentypen, d.h. keine Objekte, wird der reservierte Speicher auch richtig freigegeben.</p>
</blockquote>
<p>Hab' mich auf das Zitat bezogen und es geht ja immoment nur um elementare Datentypen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332255</guid><dc:creator><![CDATA[Paul Panther]]></dc:creator><pubDate>Wed, 25 Jul 2007 12:23:24 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 12:31:17 GMT]]></title><description><![CDATA[<p>Paul Panther schrieb:</p>
<blockquote>
<blockquote>
<p>Vergessen Sie diese leere eckige Klammer, so meldet Ihnen der Compiler keinen Fehler! Bei Felder von einfachen Datentypen, d.h. keine Objekte, wird der reservierte Speicher auch richtig freigegeben.</p>
</blockquote>
<p>Hab' mich auf das Zitat bezogen und es geht ja immoment nur um elementare Datentypen...</p>
</blockquote>
<p>... na ich lese da ganz klar eine Warnung, es nicht so zu machen. Immerhin weist er (mit Ausrufezeichen) darauf hin, dass der Compiler nicht warnt und bei primitiven Typen der Fehler evtl. nicht auffällt und nicht als Anleitung, es so zu machen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332261</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 25 Jul 2007 12:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 12:42:09 GMT]]></title><description><![CDATA[<p>Hmmm, er sagt ja aber eigentlich eindeutig, dass der Speicherbereich <strong>richtig</strong> freigegeben wird. Obwohl ich zugeben muss, dass er sich eigentlich widerspricht, weil er ja vorher sagt, dass nach new[] ein delete[] stehen <strong>muss</strong>.</p>
<p>Bei meinem ersten Post in diesem Thread ging es mir ja auch eigentlich darum, herauszustellen, dass bei dem Beispiel des Threaderstellers meiner Meinung nach kein delete[] stehen <strong>muss</strong>, sondern dass ein delete[] stehen <strong>sollte</strong>.</p>
<p>Allerdings bin ich mir jetzt nach dieser Diskussion irgendwie nicht mehr sicher...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332274</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332274</guid><dc:creator><![CDATA[Pauk Panther]]></dc:creator><pubDate>Wed, 25 Jul 2007 12:42:09 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 12:59:01 GMT]]></title><description><![CDATA[<p>Der Automechaniker sagt: &quot;Ja, sie <strong>sind</strong> noch <strong>richtig</strong> bis hierhergekommen, aber sie <strong>sollten</strong> mit dem Auto nicht mehr fahren !&quot; ...<br />
ICH würde mich selbst nicht mehr ans Steuer setzen und auch keinem Anderen raten, es zu tun. <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>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332282</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 25 Jul 2007 12:59:01 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 13:22:17 GMT]]></title><description><![CDATA[<p>Informatik ist aber eine Wissenschaft und da sollte man meiner Meinung nach schon mit so Wörtern wie &quot;müssen&quot;, &quot;dürfen&quot; und &quot;sollen&quot; anders umgehen. <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="😉"
    /> Die frage ist ja, was passiert, wenn der Automechaniker sagt, dass er für die Reperatur 2000 Euro verlangt und eine Werkstatt zwei Kilometer weiter entfernt verlangt nur 50 Euro. Wenn mir dann der Mechaniker sagt, ich sollte nicht mehr fahren, dann würde ich wahrscheinlich trotzdem noch die zwei Kilometer fahren. Sagt der Mechaniker allerdings, ich darf nicht mehr fahren und muss bei der Polizei 4000 Euro Strafe zahlen, wenn ich trotzdem weiter fahre, dann würde ich es mir schon überlegen.</p>
<p>Wollte folgenden Link nur noch mal hinzufügen, da hier im selben Tutorial delete[] für Objektfelder erklärt wird... <a href="http://www.cpp-tutor.de/cpp/le11/le11_02.htm#objektfelder" rel="nofollow">http://www.cpp-tutor.de/cpp/le11/le11_02.htm#objektfelder</a><br />
Und hier wird auch wieder nur auf die Destruktoraufrufe aufmerksam gemacht, nicht aber, dass delete und delete[] uterschiedlich viel speicher freigeben würden.</p>
<p>Wie gesagt, mir ging es ja nur darum, ob delete und delete[] für Felder von elementaren Datentypen nicht im Endeffekt das gleiche machen (sollten, wenn der Compiler Standardkonform ist)? Ich habs auf jeden Fall immer so verstanden und les' es auch aus diesem Tutorial heraus und auch noch immer aus meinem Buch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332299</guid><dc:creator><![CDATA[Paul Panther]]></dc:creator><pubDate>Wed, 25 Jul 2007 13:22:17 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 13:36:03 GMT]]></title><description><![CDATA[<p>Paul Panther schrieb:</p>
<blockquote>
<p>Informatik ist aber eine Wissenschaft und da sollte man meiner Meinung nach schon mit so Wörtern wie &quot;müssen&quot;, &quot;dürfen&quot; und &quot;sollen&quot; anders umgehen....</p>
</blockquote>
<p>OK - langer Rede, kurzer Sinn: Verwendung von delete nach new[] oder von delete[] nach new ist vom Standard nicht abgedeckt =&gt; führt zu undefiniertem Verhalten - unabhängig vom Typ.</p>
<p>Wenn Dein Tutorial etwas anderes sagt, verstehst Du es entweder falsch oder es IST falsch (in diesem Punkt). Deine Entscheidung.</p>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Ich persönlich stelle ja schon die Grundaussage &quot;für elementare Typen funktioniert das&quot; infrage (auf allen Compilern).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332309</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 25 Jul 2007 13:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 14:17:51 GMT]]></title><description><![CDATA[<p>Ok, hab mir mal die Mühe gemacht und es direkt im ISO-Standarddokument (oder wie diese Schrift auch immer heißt) nachgeschlagen, und da steht, dass es undefiniert ist.</p>
<p>Hat mich nur verwirrt, weil ich schon öfters das Beispiel (in Einführungen zu c++) gefunden habe, dass delete nach new[] aufgerufen wird, um zu zeigen, dass dann nur für ein Objekt der Destruktor aufgerufen wird. Wahrscheinlich verhalten sich viele Compiler auch so, aber nach ISO-Standard ist es undefiniert, was dann passiert.</p>
<p>Ich schiebe also einfach mal alle Schuld auf Tutorials die so etwas behaupten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>(würde ja niemals zugeben, dass ich etwas falsch verstehe <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/1332349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332349</guid><dc:creator><![CDATA[Paul Panther]]></dc:creator><pubDate>Wed, 25 Jul 2007 14:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 15:50:59 GMT]]></title><description><![CDATA[<p>Paul Panther schrieb:</p>
<blockquote>
<p>...<br />
Ich schiebe also einfach mal alle Schuld auf Tutorials die so etwas behaupten ...</p>
</blockquote>
<p>Da liegt es auch gut !<br />
Es gibt soooooo viele grottige Tutorials, dass es überhaupt ein Wunder ist, dass irgendjemand vernünftig C++ programmieren kann. <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>Du gibst ja selbst ein Beispiel von &quot;gut gemeint und schlecht gemacht&quot;: Da wollen Tutorials zeigen, dass delete nicht zu new[] passt ... und &quot;belegen&quot; das mit einem Verhalten (nur erstes Element wird gelöscht), das gar nicht definiert ist, sondern vielleicht lediglich von dem einen oder anderen Compiler zufällig so auftritt.<br />
Ich denke, &quot;reine Schrifttreue&quot; fällt vielen Autoren unheimlich schwer ... sie wollen eine technische Begründung, <em>warum</em> etwas nicht funktioniert - leider auch da, wo sie nicht sauber geliefert werden kann.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1332430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332430</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 25 Jul 2007 15:50:59 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 16:57:12 GMT]]></title><description><![CDATA[<p>Simon2  schrieb:</p>
<blockquote>
<p>Da liegt es auch gut !<br />
Es gibt soooooo viele grottige Tutorials, dass es überhaupt ein Wunder ist, dass irgendjemand vernünftig C++ programmieren kann. <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>
</blockquote>
<p>Da stimme ich dir auf jeden Fall zu! Allerdings halte ich das Tutorial und auch das Buch, welches ich die ganze Zeit meinte (&quot;C++ Lernen und professionell anwenden&quot;, das auch hier im Forum öfters mal als sehr gutes Buch beschrieben wird) jetzt nicht für grottig... (auch wenn du die Beiden wahrscheinlich jetzt nicht speziell meintest, wollte ich das zumindest nochmal herausstellen)<br />
Habe eher das Gefühl, dass dies doch ein recht häufiges Missverständnis ist...</p>
<p>Ich mein, zum einen schreiben sie ja auch richtig, dass für ein new[] ein delete[] aufgerufen werden <strong>muss</strong>, zum anderen widersprechen sie ihrer<br />
Aussage, dass sie sagen, dass es ein definiertes Verhalten dafür gibt, wenn man ein &quot;einfaches&quot; delete aufruft.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a><br />
Danke auf jeden Fall, dass du dir die Mühe gemacht hast, auf jeden meiner Beiträge zu antworten. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Das hat mich dazu gebracht es mal offiziell nachzuschlagen, weil ich es sonst einfach nicht geglaubt hätte. (weil ich es schon so oft anders gelesen hatte)</p>
<p>Man kann im Leben halt doch nur dazulernen <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/1332482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332482</guid><dc:creator><![CDATA[Paul Panther]]></dc:creator><pubDate>Wed, 25 Jul 2007 16:57:12 GMT</pubDate></item><item><title><![CDATA[Reply to nicht sicher bei delete on Wed, 25 Jul 2007 17:05:54 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>dass es überhaupt ein Wunder ist, dass irgendjemand vernünftig C++ programmieren kann.</p>
</blockquote>
<p>Das liegt an dem tollen Forum <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/1332491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1332491</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Jul 2007 17:05:54 GMT</pubDate></item></channel></rss>