<?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[Zeiger auf Array auf dem Heap nach inkrementieren löschen]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich suche dringend Hilfe bei dem Löschen von Arrays</p>
<p>und zwar:</p>
<p>Cat* catArray = new Cat[10];</p>
<p>catArray (zeigt auf das erste Element)<br />
catArray++ (zeigt auf das zweite Element)<br />
catArray++ (zeigt auf das dritte Element)</p>
<p>Nun möchte ich das ganze Array über den Pointer löschen</p>
<p>delete [] catArray (klappt nicht, weil die Adresse des Pointers verschoben wurde)</p>
<p>catArray = &amp;catArray[0] (bei &amp;catArray[0] bekomme ich irgendwie die Speicheraddresse des letzten Elements, also nicht von dem ersten Element. Warum?)</p>
<p>delete [] catArray; (geht auch nicht, weil catArray immer noch auf das dritte Element des Arrays zeigt)</p>
<p>Wie setze ich jetzt die Addresse des Arrays zurück ohne das Array wieder zu dekrementieren? Damit das Löschen endlich hinhaut...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285394/zeiger-auf-array-auf-dem-heap-nach-inkrementieren-löschen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 07:48:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285394.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Apr 2011 14:56:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Tue, 19 Apr 2011 14:57:14 GMT]]></title><description><![CDATA[<p>Hallo Forum,</p>
<p>ich suche dringend Hilfe bei dem Löschen von Arrays</p>
<p>und zwar:</p>
<p>Cat* catArray = new Cat[10];</p>
<p>catArray (zeigt auf das erste Element)<br />
catArray++ (zeigt auf das zweite Element)<br />
catArray++ (zeigt auf das dritte Element)</p>
<p>Nun möchte ich das ganze Array über den Pointer löschen</p>
<p>delete [] catArray (klappt nicht, weil die Adresse des Pointers verschoben wurde)</p>
<p>catArray = &amp;catArray[0] (bei &amp;catArray[0] bekomme ich irgendwie die Speicheraddresse des letzten Elements, also nicht von dem ersten Element. Warum?)</p>
<p>delete [] catArray; (geht auch nicht, weil catArray immer noch auf das dritte Element des Arrays zeigt)</p>
<p>Wie setze ich jetzt die Addresse des Arrays zurück ohne das Array wieder zu dekrementieren? Damit das Löschen endlich hinhaut...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051701</guid><dc:creator><![CDATA[goldenBoy]]></dc:creator><pubDate>Tue, 19 Apr 2011 14:57:14 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Tue, 19 Apr 2011 15:00:02 GMT]]></title><description><![CDATA[<p>Dann lösch eben (catArray-2). Oder viel besser: Mach so etwas gar nicht erst. Wozu soll das gut sein?</p>
<p>edit: Bist du zufällig Jürgen Wolf Schüler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051703</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Apr 2011 15:00:02 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Tue, 19 Apr 2011 15:03:36 GMT]]></title><description><![CDATA[<p>Gibt es keine Möglichkeit ohne catArray -2 zu löschen oder ohne sich die Adresse des ersten Elements in einer separaten Variable zu merken und dann zu löschen?</p>
<p>Das Problem ist, ich kenne die Zahl &quot;2&quot; nicht, weil ich das Array von einer anderen Funktion verändert bekomme. Das heißt, ich weiß es nicht, um wieviel mal das Array inkrementiert wurde...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051706</guid><dc:creator><![CDATA[goldenBoy]]></dc:creator><pubDate>Tue, 19 Apr 2011 15:03:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Tue, 19 Apr 2011 15:34:56 GMT]]></title><description><![CDATA[<p>Nein. Die Möglichkeit gibt es nicht. Aber dies alles sollte gar nicht notwendig sein. Warum benutzt du so wilde Sachen, anstatt z.B. std::vector?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051716</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Apr 2011 15:34:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 11:52:06 GMT]]></title><description><![CDATA[<p>Okay. Werden die Vector Elemente auf dem Stack oder auf dem Heap angelegt???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052024</guid><dc:creator><![CDATA[goldenBoy]]></dc:creator><pubDate>Wed, 20 Apr 2011 11:52:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 11:54:28 GMT]]></title><description><![CDATA[<p>Auf dem Heap. Auf dem Stack sind dynamische Arrays nur sehr bedingt möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052026</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Wed, 20 Apr 2011 11:54:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 11:55:41 GMT]]></title><description><![CDATA[<p>goldenBoy schrieb:</p>
<blockquote>
<p>Okay. Werden die Vector Elemente auf dem Stack oder auf dem Heap angelegt???</p>
</blockquote>
<p>Gegenfrage: Wieso sollte das interessant sein? Es funktioniert eben einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052027</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 20 Apr 2011 11:55:41 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 12:01:10 GMT]]></title><description><![CDATA[<p>und es ist bei vector garantiert, dass die elemente hintereinander liegen. theoretisch könntest du also deine pointer spielereien trotzdem machen...</p>
<p>scheint meint, dass du ein ganz großer 3 sterne programmierer bist <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/2052032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052032</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 20 Apr 2011 12:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 12:07:09 GMT]]></title><description><![CDATA[<p>Noch so allgemein:<br />
Der Pointer, dem der Rückgabewert von <code>new</code> zugewiesen wurde, sollte <strong>nie</strong> vor der Verwendung von <code>delete</code> verändert werden. Wenn du nun, wie gesagt, inkrementieren möchtest, erstellst du eben einen zweiten Zeiger. Der Zweite dient als Iterator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052035</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Wed, 20 Apr 2011 12:07:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 12:11:35 GMT]]></title><description><![CDATA[<p>Indem man zwischen dem eigentlichen Array und dem Iterator dafür unterscheidet:</p>
<pre><code class="language-cpp">Cat * const cat_array = new Cat[10];

Cat * cat_iterator = cat_array;

++cat_iterator;
++cat_iterator;

//...
delete cat_array;
</code></pre>
<p>Eigentlich ist das auch bei Standardlib-Containern gang und gäbe, daher verstehe ich den Aufschrei nicht so ganz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052038</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 20 Apr 2011 12:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 12:15:25 GMT]]></title><description><![CDATA[<p>Das ist für mich interessant, weil ich tausende von Objekten im Vector speichern will. Und vielleicht ist auf dem Stack der Speicher zu knapp.</p>
<p>Also vector speichert von Haus aus alle Elemente auf dem Heap an. Und man kann den Speicher auch explizit mit dem Clean Befehl freigeben, richtig?</p>
<p>Welche Vorteile hat man, wenn man den Vector (Vector pointer) direkt auf dem Heap anlegt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052040</guid><dc:creator><![CDATA[goldenBoy]]></dc:creator><pubDate>Wed, 20 Apr 2011 12:15:25 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 12:17:12 GMT]]></title><description><![CDATA[<p>EOutOfResources schrieb:</p>
<blockquote>
<p>Noch so allgemein:<br />
Der Pointer, dem der Rückgabewert von <code>new</code> zugewiesen wurde, sollte <strong>nie</strong> vor der Verwendung von <code>delete</code> verändert werden. Wenn du nun, wie gesagt, inkrementieren möchtest, erstellst du eben einen zweiten Zeiger. Der Zweite dient als Iterator.</p>
</blockquote>
<p>danke für den Tipp!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052042</guid><dc:creator><![CDATA[goldenBoy]]></dc:creator><pubDate>Wed, 20 Apr 2011 12:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 12:20:59 GMT]]></title><description><![CDATA[<blockquote>
<p>Welche Vorteile hat man, wenn man den Vector (Vector pointer) direkt auf dem Heap anlegt?</p>
</blockquote>
<p>Keine. Nur Nachteile.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052046</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Wed, 20 Apr 2011 12:20:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 12:22:20 GMT]]></title><description><![CDATA[<p>goldenBoy schrieb:</p>
<blockquote>
<p>Also vector speichert von Haus aus alle Elemente auf dem Heap an. Und man kann den Speicher auch explizit mit dem Clean Befehl freigeben, richtig?</p>
</blockquote>
<p>vector kennt kein clean, aber es gibt andere Befehle die ähnliches machen. Guck eben in einer Referenz nach. Der vector verwaltet seinen Speicher vollständig selber. Wenn du einen vector explizit dazu zwingen willst, seinen kompletten Speicher freizugeben (normalerweise keine gute Idee!), dann such mal nach Clear-and-minimize</p>
<blockquote>
<p>Welche Vorteile hat man, wenn man den Vector (Vector pointer) direkt auf dem Heap anlegt?</p>
</blockquote>
<p>Den vector selber auf dem Heap? Die gleichen Vorteile wie bei allen Heapvariablen: Keine nennenswerten, dafür ein paar Nachteile. Man sollte schon extrem gute Gründe dafür haben, z.B. ganz besondere Anforderungen an die Lebenszeit des Objekts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052047</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 20 Apr 2011 12:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 12:22:53 GMT]]></title><description><![CDATA[<p>Danke an alle für die Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052048</guid><dc:creator><![CDATA[goldenBoy]]></dc:creator><pubDate>Wed, 20 Apr 2011 12:22:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 21:17:38 GMT]]></title><description><![CDATA[<p>Oder Multithreading.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052271</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 20 Apr 2011 21:17:38 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Wed, 20 Apr 2011 23:11:26 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Indem man zwischen dem eigentlichen Array und dem Iterator dafür unterscheidet:</p>
<pre><code class="language-cpp">Cat * const cat_array = new Cat[10];

Cat * cat_iterator = cat_array;

++cat_iterator;
++cat_iterator;

//...
delete cat_array;
</code></pre>
<p>Eigentlich ist das auch bei Standardlib-Containern gang und gäbe, daher verstehe ich den Aufschrei nicht so ganz.</p>
</blockquote>
<p>Kurze Frage: Es müsste doch</p>
<pre><code class="language-cpp">delete[] cat_array
</code></pre>
<p>heißen oder nicht?</p>
<p>Lg freeG</p>
<p>EDIT:<br />
Was erhalte ich eigentlich zurück, wenn ich wie der TE einen Zeiger habe und dort den Indexoperator anwende?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052290</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Wed, 20 Apr 2011 23:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Thu, 21 Apr 2011 07:23:08 GMT]]></title><description><![CDATA[<p>fr33g schrieb:</p>
<blockquote>
<p>Es müsste doch</p>
<pre><code class="language-cpp">delete[] cat_array
</code></pre>
<p>heißen oder nicht?</p>
</blockquote>
<p>Ja.</p>
<p>fr33g schrieb:</p>
<blockquote>
<p>Was erhalte ich eigentlich zurück, wenn ich wie der TE einen Zeiger habe und dort den Indexoperator anwende?</p>
</blockquote>
<p>Einen Zeiger auf n Elemente weiter (wie der <code>+</code> -Operator).</p>
<p>EDIT: Natürlich <code>+</code> -Operator.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052339</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Thu, 21 Apr 2011 07:23:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Thu, 21 Apr 2011 07:22:55 GMT]]></title><description><![CDATA[<p>fr33g schrieb:</p>
<blockquote>
<p>Kurze Frage: Es müsste doch</p>
<pre><code class="language-cpp">delete[] cat_array
</code></pre>
<p>heißen oder nicht?</p>
</blockquote>
<p>Ja, absolut richtig.</p>
<p>fr33g schrieb:</p>
<blockquote>
<p>Was erhalte ich eigentlich zurück, wenn ich wie der TE einen Zeiger habe und dort den Indexoperator anwende?</p>
</blockquote>
<p><code>a[3]</code> ist äquivalent mit <code>*(a+3)</code> ist äquivalent mit <code>3[a]</code> ist äquivalent mit <code>*(3+a)</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052340</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 21 Apr 2011 07:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger auf Array auf dem Heap nach inkrementieren löschen on Thu, 21 Apr 2011 10:35:13 GMT]]></title><description><![CDATA[<p>Vielen Dank euch beiden, jetzt ist es mir wieder klar <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>Lg freeG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2052436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2052436</guid><dc:creator><![CDATA[fr33g]]></dc:creator><pubDate>Thu, 21 Apr 2011 10:35:13 GMT</pubDate></item></channel></rss>