<?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[Wert löschen nachdem es zurückgegeben wurde.]]></title><description><![CDATA[<p>Hi,<br />
ich reservier in einer Funktion neuen Speicher, deren Inhalt dann allerdings zurückgegeben werden soll. Wie kann ich den Inhalt zurückgeben und erst danach freigeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/239184/wert-löschen-nachdem-es-zurückgegeben-wurde</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 14:23:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239184.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Apr 2009 12:10:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 12:10:46 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich reservier in einer Funktion neuen Speicher, deren Inhalt dann allerdings zurückgegeben werden soll. Wie kann ich den Inhalt zurückgeben und erst danach freigeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698573</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Mon, 20 Apr 2009 12:10:46 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 12:14:06 GMT]]></title><description><![CDATA[<p>Zeig mal den Code her, was du machen willst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698575</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 20 Apr 2009 12:14:06 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 12:16:18 GMT]]></title><description><![CDATA[<p>Das Freigeben ist Aufgabe des Aufrufers, und deshalb nicht unbedingt eine gute Möglichkeit. Kannst du deinen Zeiger nicht kapseln und in eine RAII-Klasse einbinden, sodass der Speicher im Destruktor freigegeben wird? Sonst reicht vielleicht auch ein Smart-Pointer. Oder wenn möglich natürlich direkt ein Stack-Objekt und keinen Zeiger zurückgeben.</p>
<p>Oder du gehst halt den Weg über eine Freigabefunktion. Das Problem hierbei ist, dass das schnell mal vergessen geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698577</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 20 Apr 2009 12:16:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 12:40:36 GMT]]></title><description><![CDATA[<p>Äh? Ich habe jetzt kein bisschen verstanden <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/1698594</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698594</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Mon, 20 Apr 2009 12:40:36 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 12:43:26 GMT]]></title><description><![CDATA[<p>Lumio schrieb:</p>
<blockquote>
<p>Äh? Ich habe jetzt kein bisschen verstanden <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>
</blockquote>
<p><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="😃"
    /> xD LOL!^^</p>
<p>Aber auf die Idee, genau nachzufragen, kommst du nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698597</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 20 Apr 2009 12:43:26 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 13:00:41 GMT]]></title><description><![CDATA[<p>Ich versteh ganz einfach jeden einzelnen Begriff nicht:</p>
<ul>
<li>Was bedeutet Zeiger kapseln und in eine RAII-Klasse einbinden?</li>
<li>Was meinst du mit Speicher im Destruktor freigegeben?<br />
Das erinnert mich an Klassen (hab ich in C++ noch nicht durchgenommen), wo es ja einen Destruktor gibt.</li>
<li>Was ist ein Smart-Pointer?</li>
<li>Was ist ein Stack-Objekt?</li>
<li>Freigabefunktion? Warum wird diese vergessen?</li>
</ul>
<p><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/1698606</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698606</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Mon, 20 Apr 2009 13:00:41 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 13:04:04 GMT]]></title><description><![CDATA[<p>Lumio schrieb:</p>
<blockquote>
<p>Ich versteh ganz einfach jeden einzelnen Begriff nicht:</p>
<ul>
<li>Was bedeutet Zeiger kapseln und in eine RAII-Klasse einbinden?</li>
<li>Was meinst du mit Speicher im Destruktor freigegeben?<br />
Das erinnert mich an Klassen (hab ich in C++ noch nicht durchgenommen), wo es ja einen Destruktor gibt.</li>
<li>Was ist ein Smart-Pointer?</li>
<li>Was ist ein Stack-Objekt?</li>
<li>Freigabefunktion? Warum wird diese vergessen?</li>
</ul>
<p><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><code>[ ]</code> Du weisst, was eine Suchmaschine ist, und wie man sie benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698609</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 20 Apr 2009 13:04:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 13:08:34 GMT]]></title><description><![CDATA[<p>äh... hm... hab ich nen Joker <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Ja ne, is klar, aber hätte ja sein können, dass es mir jemand auf die schnelle beantwortet hätte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698612</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Mon, 20 Apr 2009 13:08:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 13:15:20 GMT]]></title><description><![CDATA[<p>Lumio schrieb:</p>
<blockquote>
<p>Das erinnert mich an Klassen (hab ich in C++ noch nicht durchgenommen), wo es ja einen Destruktor gibt.</p>
</blockquote>
<p>Dann hat es nicht sehr viel Sinn, wenn wir dir die anderen Konzepte erklären, da das Verständnis von Klassen dafür notwendig ist. Aber RAII beantwortet insofern deine Frage, als es ein in C++ sehr oft angetroffenes Konzept ist, um die Verantwortlichkeit für Freigaben und Aufräumarbeiten zu regeln.</p>
<p>Lumio schrieb:</p>
<blockquote>
<p>Freigabefunktion? Warum wird diese vergessen?</p>
</blockquote>
<p>Deswegen:</p>
<pre><code class="language-cpp">bool AnyFunction()
{
   ... // ganz viel Code
   int* NewMemory = GetIntMemory(12); // deine Speicherfunktion, die new benutzt.
   ... // noch mehr Code, in dem NewMemory eingesetzt wird
   if (...)
      return true; // was ist mit NewMemory? -&gt; Freigabe nicht vergessen.

   ... // NewMemory wird nun nicht mehr eingesetzt. Also holen wir neuen Speicher...
   NewMemory = GetIntMemory(21); // oh, da hätte man den alten Speicher freigeben müssen.
   ... // wieder viel Code
   return false;
} // hier endet der Block, dran gedacht, NewMemory freizugeben?
</code></pre>
<p>Das Beispiel ist vielleicht überspitzt, aber sowas geht schnell vergessen. Besonders, wenn die Funktion an vielen Stellen verlassen werden kann (evtl. auch durch Exceptions).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698616</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 20 Apr 2009 13:15:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 13:23:37 GMT]]></title><description><![CDATA[<p>Lumio schrieb:</p>
<blockquote>
<p>Hi,<br />
ich reservier in einer Funktion neuen Speicher, deren Inhalt dann allerdings zurückgegeben werden soll. Wie kann ich den Inhalt zurückgeben und erst danach freigeben?</p>
</blockquote>
<p>Hi,</p>
<p>meinst Du sowas?</p>
<pre><code class="language-cpp">#include &lt;string&gt;

std::string meineFunktion() {
   std::string Rueckgabe(&quot;Rückgabe&quot;); // hier wird Speicher reserviert
   return Rueckgabe;
}

int main() {
   std::string mainVar;

   mainVar = meineFunktion(); // hier wird der Inhalt von &quot;meineFunktion()::Rueckgabe&quot; kopiert und dieser anschließend zerstört
...
</code></pre>
<p>(Falls es Dir nicht um &quot;Speicher für Buchstaben&quot; geht: Das ist ein allgemeines Konzept, das auch mit int, vector&lt;float&gt;, ... und Alles Andere funktioniert)</p>
<p><em>WENN</em> das in etwa Deiner Frage entspricht, hast Du vermutlich sowas versucht:</p>
<pre><code class="language-cpp">char* meineSchlechteFunktion() {
   char* Rueckgabe = new char[10];
   Rueckgabe[2] = 'a';
   return Rueckgabe;
   delete[] Rueckgabe; // Hoppla ... tut nicht..
}

int main() {
   char* mainVar;
   mainVar = meineSchlechteFunktion();
...
</code></pre>
<p>Das klappt natürlich nicht, weil Du garantiert hoffst, dass mainVar hinterher auch auch Speicher zeigt ... und deshalb solltest Du ihn nicht wieder freigeben.</p>
<p>Also musst Du den Ablauf beibehalten:<br />
a) Speicher in der Funktion allozieren (machen Dir Typen wie int, float, std::string, std::vector, ... ganz automatisch)<br />
b) Kopieren in durch main bereitgestellten Speicher<br />
c) danach erst zerstören des Speichers in der Funktion.</p>
<p>Du darfst b) und das Bereitstellen des Speichers für main nicht vergessen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698626</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 20 Apr 2009 13:23:37 GMT</pubDate></item><item><title><![CDATA[Reply to Wert löschen nachdem es zurückgegeben wurde. on Mon, 20 Apr 2009 16:04:02 GMT]]></title><description><![CDATA[<p>Lumio schrieb:</p>
<blockquote>
<p>...Das erinnert mich an Klassen (hab ich in C++ noch nicht durchgenommen), wo es ja einen Destruktor gibt...</p>
</blockquote>
<p>Ohne Klassen (und damit ohne Destruktoren) gibt es keine sinnvolle Möglichkeit. RAII basiert ebenso auf Klassen wie Smartpointer...</p>
<p>Ansonsten bleibt dir wirklich nur die Allokation des Speichers von der Stelle der Freigabe zu trennen (Etwas das man in C++ in der Regel nicht machen sollte).</p>
<p>Klassen sollten bei C++ immer eines der Themen sein, die man recht früh zumindest grundlegend durchnehmen sollte. Und sei es nur soweit, das man ganz grob weiß wie diese funktionieren, und zumindest eine Hand voll nützlicher Klassen aus der Standardbibliothek verwenden kann (Aus meiner Sicht reichen erstmal die absoluten Grundlagen zu std::string, std::vector, std::cin sowie std::cout). Meist benötigt man bei einfachen Programmen dann noch kein (sichtbares) Speichermanagement.</p>
<p>Leider lehren noch zuviele C++ Bücher, Lehrer und Dozenten erst mehr oder weniger C.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1698761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1698761</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 20 Apr 2009 16:04:02 GMT</pubDate></item></channel></rss>