<?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 es zu einem Speicherleck?]]></title><description><![CDATA[<p>Ich hab folgenden Code:</p>
<p>int &amp; func()<br />
{<br />
int x = 10;</p>
<p>return x;<br />
}</p>
<p>Kommt es dabei zu einem Speicherleck?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/298691/kommt-es-zu-einem-speicherleck</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 18:47:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298691.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Jan 2012 19:31:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 19:31:37 GMT]]></title><description><![CDATA[<p>Ich hab folgenden Code:</p>
<p>int &amp; func()<br />
{<br />
int x = 10;</p>
<p>return x;<br />
}</p>
<p>Kommt es dabei zu einem Speicherleck?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172482</guid><dc:creator><![CDATA[inc7]]></dc:creator><pubDate>Wed, 25 Jan 2012 19:31:37 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 19:34:13 GMT]]></title><description><![CDATA[<p>... ist undefiniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172483</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 25 Jan 2012 19:34:13 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 19:53:39 GMT]]></title><description><![CDATA[<p>Objekte die innerhalb einer Funktion oder einer Methode angelegt wurden, sind nur so lange definiert, bis der Funktions-, Methodenaufruf beendet wurde.<br />
Generell ist es &quot;fast&quot; nie eine gute Idee Referenzen zurückzugeben, da es schwierig werden kann, die Gültigkeitsdauer des Objektes zu ermitteln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172496</guid><dc:creator><![CDATA[Helfi]]></dc:creator><pubDate>Wed, 25 Jan 2012 19:53:39 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 19:58:30 GMT]]></title><description><![CDATA[<p>Helfi schrieb:</p>
<blockquote>
<p>Objekte die innerhalb einer Funktion oder einer Methode angelegt wurden, sind nur so lange definiert, bis der Funktions-, Methodenaufruf beendet wurde.<br />
Generell ist es &quot;fast&quot; nie eine gute Idee Referenzen zurückzugeben, da es schwierig werden kann, die Gültigkeitsdauer des Objektes zu ermitteln.</p>
</blockquote>
<p>Und was wenn sie statisch sind?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172499</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Jan 2012 19:58:30 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 20:08:56 GMT]]></title><description><![CDATA[<p>Dann sollt's IMHO legal sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172502</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 25 Jan 2012 20:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 20:10:11 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Dann sollt's IMHO legal sein.</p>
</blockquote>
<p>Das ist aber hässlich, nicht? :schluchz:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172503</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 25 Jan 2012 20:10:11 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 20:13:53 GMT]]></title><description><![CDATA[<p>Darum fast nie. Referenzen auf statische Objekte sind eine Ausnahme.<br />
Es kann sich sogar als nützlich erweisen ein Objekt in eine Funktion oder Methode zu stecken, nämlich wenn der Initialisierungs Zeitpunkt des Objektes unklar ist. Zu lesen in Effektiv C++, ich glaube es war die dritte Auflage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172509</guid><dc:creator><![CDATA[Helfi]]></dc:creator><pubDate>Wed, 25 Jan 2012 20:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 20:21:48 GMT]]></title><description><![CDATA[<p>Vielleicht eine etwas genauere Erklaerung:</p>
<pre><code class="language-cpp">int &amp; func() 
{ 
int x = 10; // Automatic Storage Duration
return x; 
}
</code></pre>
<p>Das Verhalten dieses Codes ist nicht definiert. Der Grund dafuer ist, dass x &quot;Automatic Storage Duration&quot; hat, d.h. wenn die Funktion verlassen wird, so wird x automatisch geloescht. Du gibst in deiner Funktion eine Referenz auf eine Variable zurueck, die zerstoert ist. Das heisst die zurueckgegebene Referenz zeigt irgendwo ins Nirvana.<br />
Dieses Verhalten ist nicht definiert.</p>
<p>Falls dir die Begriffe &quot;Automatic storage duration&quot;, &quot;Static storage duration&quot;, &quot;Dynamic storage duration&quot; (ich weiss nicht wie die Begriffe auf deutsch sind), dann solltest du das nachlesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172518</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172518</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Wed, 25 Jan 2012 20:21:48 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 22:13:24 GMT]]></title><description><![CDATA[<p>Mit</p>
<pre><code class="language-cpp">int x = 10
</code></pre>
<p>wird der Variable x den Wert 10 zugewiesen und mittels return die Referenz zurückgegeben. Die Lebenszeit einer Variable bleibt solange erhalten, bis die letzte geschweifte Klammer erreicht wird. Beispiel:</p>
<pre><code class="language-cpp">{
    int x = 10 
} /* Ende */
</code></pre>
<p>Danach hört die Lebenszeit auf.</p>
<p>Das sollte ja verständlich und klar sein. In dem Fall mit der Referenz ist es aber so, dass die Lebenszeit nicht endet, sondern weiter erhalten bleibt. Nach dem Verlassen der Funktion ist es dennoch möglich über die zurückgegebene Referenz auf x (indirekt) zuzugreifen. Streng genommen wäre das ja schon ein Memory Leak, oder?</p>
<p>Lässt sich von außen die Lebenszeit beenden, ohne a) die Funktion, die die Funktion aufruft zu verlassen und b) ohne &quot;Tweaks&quot; zu arbeiten? Ich möchte also sagen:</p>
<pre><code class="language-cpp">int &amp; func()
{
int x = 10;

return x;
}

void testfunc()
{
int test = func();
// Hier Lebenszeit von test/&amp;x beenden
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2172625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172625</guid><dc:creator><![CDATA[inc7]]></dc:creator><pubDate>Wed, 25 Jan 2012 22:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 22:20:25 GMT]]></title><description><![CDATA[<p>inc7 schrieb:</p>
<blockquote>
<p>In dem Fall mit der Referenz ist es aber so, dass die Lebenszeit nicht endet, sondern weiter erhalten bleibt.</p>
</blockquote>
<p>nein.</p>
<p>@icarus: Soweit ist da noch nichts undefiniert. Problematisch wird es erst, wenn der Rückgabewert verwendet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172629</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 25 Jan 2012 22:20:25 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 22:21:21 GMT]]></title><description><![CDATA[<p>inc7 schrieb:</p>
<blockquote>
<p>In dem Fall mit der Referenz ist es aber so, dass die Lebenszeit nicht endet, sondern weiter erhalten bleibt.</p>
</blockquote>
<p>Nein, die Variable wird zerstoert wenn die Funktion verlassen wird - nach den Regeln der Automatic Storage Duration.</p>
<p>Wenn du willst, dass die Variable nach Beendigung der Funktion weiterexistiert, dann musst du dafuer sorgen, dass die Dynamic Storage Duration bekommt. Das erreichst du, indem du Speicher met new anforderst, also etwa so:</p>
<pre><code class="language-cpp">int *func()
{
int *x = new int(10);

return x;
}
</code></pre>
<p>Dann existiert die Variable auch nach Beendigung von func(). Das Problem ist dann allerdings, dass der Speicher irgendwo wieder freigegeben werden muss. Das ist bei grossen Programm schnell unueberschaubar. Deshalb sollte man solchen Code wenn immer moeglich vermeiden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172630</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Wed, 25 Jan 2012 22:21:21 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 22:32:12 GMT]]></title><description><![CDATA[<p>Naja, solange eine Referenz auf eine statische Variable gültig bleibt, brauch ich kein <code>new</code> . Aber bitte, bitte möge irgendjemand Standardbelesenes hier auftauchen und verlauten, das dies nicht funktioniert, denn ich find's grausam. <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/2172633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172633</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 25 Jan 2012 22:32:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 22:42:02 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>Naja, solange eine Referenz auf eine statische Variable gültig bleibt, brauch ich kein <code>new</code> . Aber bitte, bitte möge irgendjemand Standardbelesenes hier auftauchen und verlauten, das dies nicht funktioniert, denn ich find's grausam. <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>Dann braucht Meyers aber ein neues Singleton.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172637</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 25 Jan 2012 22:42:02 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Wed, 25 Jan 2012 23:01:23 GMT]]></title><description><![CDATA[<p>Jo. Dann soll der Meyer sein Singleton b'halten <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/2172645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172645</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 25 Jan 2012 23:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to Kommt es zu einem Speicherleck? on Thu, 26 Jan 2012 15:14:17 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2172924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2172924</guid><dc:creator><![CDATA[inc7]]></dc:creator><pubDate>Thu, 26 Jan 2012 15:14:17 GMT</pubDate></item></channel></rss>