<?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[Kommt free() nicht mit Arrays klar?]]></title><description><![CDATA[<p>Hi @all!<br />
Folgendes Problemchen: Ich habe ein Array von Klassen, das mit einer Add-Methode vergrößert werden soll. Normalerweise würde ich das so machen (z.T. mit C++-Commands):</p>
<pre><code class="language-cpp">CKlasse* newarray = new CKlasse[newsize];
memcpy(newarray, oldarray, sizeof(oldarray[0])*oldsize);
delete[] oldarray;
</code></pre>
<p>Hat sich in der Vergangenheit auch bewährt. Jetzt will ich das ganze aber mit einer Klasse machen, die selbst Pointer als Member hat und den Speicherplatz, auf den diese verweisen, beim Aufruf des Destruktors wieder freigibt. So würden die Elemente des newarray früher oder später eine Zugriffsverletzung verursachen.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Damit genau das nicht passiert, benutze ich bei dieser Klasse nicht delete[] sondern free(). Leider funktioniert das ganze nur solange das oldarray nicht mehr als 1 Element hat. Ab zwei Elementen sagt Windows &quot;keine Rückmeldung&quot;. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Kommt free() also nicht mit Arrays klar? Kann es sein, dass man noch irgendwas daran anpassen muss (wie bei delete, das zu delete[] wird)?</p>
<p>Bin dankbar für jede Hilfe.</p>
<p>Mr Train</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/241495/kommt-free-nicht-mit-arrays-klar</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 10:54:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/241495.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 May 2009 12:39:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kommt free() nicht mit Arrays klar? on Thu, 21 May 2009 12:39:42 GMT]]></title><description><![CDATA[<p>Hi @all!<br />
Folgendes Problemchen: Ich habe ein Array von Klassen, das mit einer Add-Methode vergrößert werden soll. Normalerweise würde ich das so machen (z.T. mit C++-Commands):</p>
<pre><code class="language-cpp">CKlasse* newarray = new CKlasse[newsize];
memcpy(newarray, oldarray, sizeof(oldarray[0])*oldsize);
delete[] oldarray;
</code></pre>
<p>Hat sich in der Vergangenheit auch bewährt. Jetzt will ich das ganze aber mit einer Klasse machen, die selbst Pointer als Member hat und den Speicherplatz, auf den diese verweisen, beim Aufruf des Destruktors wieder freigibt. So würden die Elemente des newarray früher oder später eine Zugriffsverletzung verursachen.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Damit genau das nicht passiert, benutze ich bei dieser Klasse nicht delete[] sondern free(). Leider funktioniert das ganze nur solange das oldarray nicht mehr als 1 Element hat. Ab zwei Elementen sagt Windows &quot;keine Rückmeldung&quot;. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Kommt free() also nicht mit Arrays klar? Kann es sein, dass man noch irgendwas daran anpassen muss (wie bei delete, das zu delete[] wird)?</p>
<p>Bin dankbar für jede Hilfe.</p>
<p>Mr Train</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713702</guid><dc:creator><![CDATA[Mr Train]]></dc:creator><pubDate>Thu, 21 May 2009 12:39:42 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt free() nicht mit Arrays klar? on Thu, 21 May 2009 13:54:40 GMT]]></title><description><![CDATA[<p>malloc/free kennen keine &quot;Arrays&quot; sondern nur Speicherblöcke. free kommt außerdem nur mit malloc-angeforderten Speicher klar, du kannst new und free bzw. malloc und delete miteinander nicht vermischen, was ich aus deiner Erklärung vermute.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713742</guid><dc:creator><![CDATA[supertux]]></dc:creator><pubDate>Thu, 21 May 2009 13:54:40 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt free() nicht mit Arrays klar? on Thu, 21 May 2009 18:37:32 GMT]]></title><description><![CDATA[<p>...und lasse er sich ins c++ forum verschieben.<br />
<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/1713870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713870</guid><dc:creator><![CDATA[+fricky]]></dc:creator><pubDate>Thu, 21 May 2009 18:37:32 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt free() nicht mit Arrays klar? on Fri, 22 May 2009 00:34:19 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-1819.html" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html" rel="nofollow">ANSI C</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1713983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1713983</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Fri, 22 May 2009 00:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt free() nicht mit Arrays klar? on Fri, 22 May 2009 10:46:06 GMT]]></title><description><![CDATA[<p>Erstens würde ich für solche Sachen einen Container der Standardbibliothek empfehlen. Z.B <code>std::vector</code> , oder je nach Vergrösserungsverhalten <code>std::list</code> .</p>
<p>Aber zu dem Problem sehe ich nicht ganz, was du meinst. Du kannst du auch innerhalb einer Klasse ganz normal new[]/delete[] benutzen..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714093</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 22 May 2009 10:46:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt free() nicht mit Arrays klar? on Fri, 22 May 2009 11:24:34 GMT]]></title><description><![CDATA[<p>Mr Train schrieb:</p>
<blockquote>
<p>Bin dankbar für jede Hilfe.</p>
</blockquote>
<p>der code ist furchtbar und extrem fehleranfällig. objekte mit memcpy zu kopieren funktioniert nur in bestimmten ausnahmefällen, und free ist ganz bestimmt kein ersatz für delete[]. free und malloc sollten generell in c++ quasi nie verwendet werden (müssen), sofern man es nicht gerade mit schlecht programmierten c-interfaces zu tun hat.</p>
<p>du solltest dich entscheiden, ob du in c++ oder c programmieren willst.<br />
gibt es einen grund dafür, warum nicht die standard-container nimmst?<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-143816.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-143816.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714120</guid><dc:creator><![CDATA[sichadat]]></dc:creator><pubDate>Fri, 22 May 2009 11:24:34 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt free() nicht mit Arrays klar? on Fri, 22 May 2009 13:32:06 GMT]]></title><description><![CDATA[<p>sichadat schrieb:</p>
<blockquote>
<p>free und malloc sollten generell in c++ quasi nie verwendet werden (müssen), sofern man es nicht gerade mit schlecht programmierten c-interfaces zu tun hat.</p>
</blockquote>
<p>... oder man sich auf Low-Level-Ebenen bewegt, zum Beispiel für Allokatoren, Speicherüberwachungstools etc.</p>
<p>Mr Train, nimm statt <code>memcpy()</code> den STL-Algorithmus <code>std::copy()</code> , der kopiert nämlich Objekte semantisch statt byteweise und führt auch bei Non-PODs nicht zu undefiniertem Verhalten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714231</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 22 May 2009 13:32:06 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt free() nicht mit Arrays klar? on Fri, 22 May 2009 14:04:35 GMT]]></title><description><![CDATA[<p>Du hast irgendwo einen Logikfehler. Es kann nicht sein, dass mehrere Objektinstanzen einen Pointer haben, die alle auf das gleiche zeigen und sich die Klasse trotzdem um die Speicherverwaltung von diesen kümmern will (ohne sich abzusprechen).<br />
Du kannst hier shared_ptr verwenden oder im Kopierkonstruktor jeweils eine neue Instanz des problematischen Objekts erzeugen anstatt nur den Zeiger zu kopieren.</p>
<p>Edit: und von memcpy musst du dich dann natürlich auch trennen, wie schon erwähnt wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1714258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1714258</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Fri, 22 May 2009 14:04:35 GMT</pubDate></item></channel></rss>