<?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[Speicherleck möglich???]]></title><description><![CDATA[<p>Folgendes Codebeispiel - ist hier ein Speicherleck möglich, wenn functionThrowingException() eine Exception wirft?</p>
<p>Jedenfalls hat myObject zwar noch den Wert 0 im catch, aber das new wurde ja bereits aufgerufen - so gesehen also doch ein Speicherleck?</p>
<pre><code>MyClass* myObject=0;
	try
	{
		myObject= new MyClass ( functionThrowingException() );
	}
	catch(...)
	{
		return false;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/314942/speicherleck-möglich</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 13:56:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314942.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Mar 2013 09:36:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherleck möglich??? on Tue, 19 Mar 2013 09:36:29 GMT]]></title><description><![CDATA[<p>Folgendes Codebeispiel - ist hier ein Speicherleck möglich, wenn functionThrowingException() eine Exception wirft?</p>
<p>Jedenfalls hat myObject zwar noch den Wert 0 im catch, aber das new wurde ja bereits aufgerufen - so gesehen also doch ein Speicherleck?</p>
<pre><code>MyClass* myObject=0;
	try
	{
		myObject= new MyClass ( functionThrowingException() );
	}
	catch(...)
	{
		return false;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2307798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307798</guid><dc:creator><![CDATA[sadasd]]></dc:creator><pubDate>Tue, 19 Mar 2013 09:36:29 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck möglich??? on Tue, 19 Mar 2013 09:52:22 GMT]]></title><description><![CDATA[<p>Hier würde <code>functionThrowingException()</code> vor dem new ausgeführt. Insofern kein Problem. Selbst wenn der Konstruktor von MyClass eine Exception werfen würde, wäre garantiert dass der Speicher freigegeben wird<sup>*</sup>.</p>
<p>Problematisch wäre folgender Fall:</p>
<pre><code>MyClass* myObject=0;
    try
    {
        myObject= new MyClass ( functionThrowingException() );
        // Hier eine Exception
    }
    catch(...)
    {
        return false;
    }
    // Oder auch hier
</code></pre>
<p>Da du nicht das RAII-Idiom verwendest (warum nicht? Das hätte nur Vorteile), wäre da ein Speicherleck.</p>
<p><sup>*</sup>: Falls MyClass selber Ressourcen beschlagnahmt hat, bevor die Exception kam, muss es diese natürlich trotzdem wieder richtig freigeben. Siehe meinen Tipp über RAII, wie dieser Vorgang automatisiert werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2307806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307806</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Mar 2013 09:52:22 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck möglich??? on Tue, 19 Mar 2013 09:51:08 GMT]]></title><description><![CDATA[<pre><code>std::unique_ptr&lt;MyClass&gt; myObject;
try
{
    myObject.reset(new MyClass ( functionThrowingException() ));
}
catch(...)
{
    return false;
}
</code></pre>
<p>So nix Speicherlöcher mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2307809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307809</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 19 Mar 2013 09:51:08 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck möglich??? on Tue, 19 Mar 2013 09:56:44 GMT]]></title><description><![CDATA[<p>RAII ist schon klar - ich möchte trotzdem wissen, ob es hier zu einem Speicherleck kommen kann.</p>
<p>Wenn ich im VS mit dem Debugger durchsteppe, so wird zuerst void* __cdecl operator new(size_t nSize) aufgerufen, und erst dann functionThrowingException().<br />
Also laut dem, was ich im Debugger sehe, gibts ein Speicherleck!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2307813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307813</guid><dc:creator><![CDATA[sadasd]]></dc:creator><pubDate>Tue, 19 Mar 2013 09:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck möglich??? on Tue, 19 Mar 2013 10:34:45 GMT]]></title><description><![CDATA[<p>Zeig ein vollständiges Beispiel!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2307844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307844</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 19 Mar 2013 10:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck möglich??? on Tue, 19 Mar 2013 10:40:16 GMT]]></title><description><![CDATA[<p>sadasd schrieb:</p>
<blockquote>
<p>Also laut dem, was ich im Debugger sehe, gibts ein Speicherleck!</p>
</blockquote>
<p>Speicherlecks haben es so an sich, dass sie nicht dann auftreten, wenn man sie erwartet, sondern an einer anderen Stelle.</p>
<p>Bei dir ist es jedenfalls so, dass im Fall von <code>return false</code> kein Speicherleck ist.</p>
<p>Dass es bei solchem Code woanders auftritt ist allerdings sehr wahrscheinlich. Leute die Pointer verwenden, diese auf 0 initialisieren und mit Exceptions spielen wie vor 30 Jahren sind immer suspekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2307845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307845</guid><dc:creator><![CDATA[janeisklar]]></dc:creator><pubDate>Tue, 19 Mar 2013 10:40:16 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck möglich??? on Tue, 19 Mar 2013 12:36:28 GMT]]></title><description><![CDATA[<p>Speicherleck gefunden, lag ein paar Zeilen darunter.</p>
<p>Grund war:</p>
<blockquote>
<p>Dass es bei solchem Code woanders auftritt ist allerdings sehr wahrscheinlich. Leute die Pointer verwenden, diese auf 0 initialisieren und mit Exceptions spielen wie vor 30 Jahren sind immer suspekt.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2307890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2307890</guid><dc:creator><![CDATA[sadasd]]></dc:creator><pubDate>Tue, 19 Mar 2013 12:36:28 GMT</pubDate></item></channel></rss>