<?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[Speicherfreigabe mit &amp;quot;delete&amp;quot;]]></title><description><![CDATA[<p>Hi zusammen!</p>
<p>Habe folgende Frage zur Speicherfreigabe mit &quot;delete&quot;:</p>
<p>Wenn ich mir innerhalb einer Funktion Speicher mit &quot;new&quot; beschafft habe, den dazugehörigen Zeiger dann wieder an den Aufrufer zurückgebe, wie gebe ich dann den in der Funktion beschafften Speicher z.B. in main() wieder frei?</p>
<p>Bsp: Duplizieren eines C-strings. Funktion bekommt Zeiger auf C-String übergeben und liefert Zeiger auf duplizierten C-String zurück.</p>
<pre><code class="language-cpp">char* strduplikat(const char* s)
{
	char* pdupl = new char[strlen(s)+1];
	char* temp = pdupl;
	while(*temp++ = *s++); // String elementweise kopieren

	return pdupl;
}
</code></pre>
<p>Aufruf der Funktion:</p>
<pre><code class="language-cpp">char* outputstr = strduplikat(inputstr);
</code></pre>
<p>Über den Namen &quot;pdupl&quot; komme ich an den Speicher natürlich nicht mehr ran.</p>
<pre><code class="language-cpp">delete [] outputsr;
</code></pre>
<p>führt zu Fehlermeldung.</p>
<p>Wie funktioniert das also?</p>
<p>Danke im voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/126960/speicherfreigabe-mit-quot-delete-quot</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 22:08:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/126960.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 20 Nov 2005 11:48:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherfreigabe mit &amp;quot;delete&amp;quot; on Sun, 20 Nov 2005 11:48:05 GMT]]></title><description><![CDATA[<p>Hi zusammen!</p>
<p>Habe folgende Frage zur Speicherfreigabe mit &quot;delete&quot;:</p>
<p>Wenn ich mir innerhalb einer Funktion Speicher mit &quot;new&quot; beschafft habe, den dazugehörigen Zeiger dann wieder an den Aufrufer zurückgebe, wie gebe ich dann den in der Funktion beschafften Speicher z.B. in main() wieder frei?</p>
<p>Bsp: Duplizieren eines C-strings. Funktion bekommt Zeiger auf C-String übergeben und liefert Zeiger auf duplizierten C-String zurück.</p>
<pre><code class="language-cpp">char* strduplikat(const char* s)
{
	char* pdupl = new char[strlen(s)+1];
	char* temp = pdupl;
	while(*temp++ = *s++); // String elementweise kopieren

	return pdupl;
}
</code></pre>
<p>Aufruf der Funktion:</p>
<pre><code class="language-cpp">char* outputstr = strduplikat(inputstr);
</code></pre>
<p>Über den Namen &quot;pdupl&quot; komme ich an den Speicher natürlich nicht mehr ran.</p>
<pre><code class="language-cpp">delete [] outputsr;
</code></pre>
<p>führt zu Fehlermeldung.</p>
<p>Wie funktioniert das also?</p>
<p>Danke im voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922055</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Sun, 20 Nov 2005 11:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe mit &amp;quot;delete&amp;quot; on Sun, 20 Nov 2005 12:00:21 GMT]]></title><description><![CDATA[<p>benutz ganz einfach std::string!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922066</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 20 Nov 2005 12:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe mit &amp;quot;delete&amp;quot; on Sun, 20 Nov 2005 12:00:27 GMT]]></title><description><![CDATA[<p>Mußte am besten Smart-Pointer benutzen, die das autom. erledigen. Im ISO C++ ist zur Zeit ein Smartpointer vorhanden: auto_ptr.</p>
<p>shared_ptr aus Boost wird im nächsten C++ Standard rein kommen.</p>
<p>Ich hatte mal ein Tutorial zu auto_ptr geschrieben:<br />
<a href="http://www.kharchi.de/auto_ptr.html" rel="nofollow">http://www.kharchi.de/auto_ptr.html</a></p>
<p>Falls du dir Mühe machen willst (die sich lohnt) würde ich mir auf jeden Fall shared_ptr von Boost anschauen und auch benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922067</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sun, 20 Nov 2005 12:00:27 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe mit &amp;quot;delete&amp;quot; on Sun, 20 Nov 2005 12:01:10 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>benutz ganz einfach std::string!</p>
</blockquote>
<p>Sowieso! <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="🙂"
    /> Aber er hat dann immer noch das Factory-Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922068</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sun, 20 Nov 2005 12:01:10 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe mit &amp;quot;delete&amp;quot; on Sun, 20 Nov 2005 12:14:35 GMT]]></title><description><![CDATA[<p>weder auto_ptr noch shared_ptr dürfen hier verwendet werden, denn es handelt sich um ein array.</p>
<p>bleibt noch boost::shared_array wenn man keinen zusätzlichen aufwand betreiben will.</p>
<p>dein delete [] ... muss eigentlich funktionieren, ausserdem ist</p>
<pre><code class="language-cpp">while(*temp++ = *s++); // String elementweise kopieren
</code></pre>
<p>nicht so gut wie</p>
<pre><code class="language-cpp">strcpy( pdupl, s );
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">size_t size = strlen( s ) + 1;
    char* pdupl = new char[ size ];
    memcpy( pdubpl, s, size );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/922078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922078</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 20 Nov 2005 12:14:35 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe mit &amp;quot;delete&amp;quot; on Sun, 20 Nov 2005 12:22:51 GMT]]></title><description><![CDATA[<p>Nanuq schrieb:</p>
<blockquote>
<pre><code class="language-cpp">delete [] outputsr;
</code></pre>
<p>führt zu Fehlermeldung.</p>
</blockquote>
<p>Sollte nicht (abgesehen vom Tippfehler).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922093</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922093</guid><dc:creator><![CDATA[Ringding]]></dc:creator><pubDate>Sun, 20 Nov 2005 12:22:51 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfreigabe mit &amp;quot;delete&amp;quot; on Sun, 20 Nov 2005 12:41:10 GMT]]></title><description><![CDATA[<p>Danke für die Tipps!</p>
<pre><code class="language-cpp">delete [] outputstr;
</code></pre>
<p>fuktioniert tatsächlich. Da war wohl woanders der Wurm drin.</p>
<p>Ringding schrieb:</p>
<blockquote>
<p>Sollte nicht (abgesehen vom Tippfehler)</p>
</blockquote>
<p>Ooops! Naja, der war's jedenfalls nicht. Den hätte mir der Compiler dann schon um die Ohren gehauen <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/922131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922131</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Sun, 20 Nov 2005 12:41:10 GMT</pubDate></item></channel></rss>