<?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 wegen verlorenem Pointer - Wie umgehen?]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Problem! Im Konstruktor meiner Frame-Klasse erzeuge ich eine Instanz der Klasse 'SeaTalk'. Der Zeiger auf das gerade erzeugte Objekt wird als private Variable in der Frame-Klasse gespeichert. Weil danach der Frame-Konstruktor zuende ist, geht der Zeiger verloren. Ein delete im Destruktor der Frame-Klasse bringt logischerweise auch nichts. Ich habe das Problem, soweit ich das sehe, verstanden. Nur wie umgeht man diese Problematik?</p>
<p>mfG, Sven</p>
<pre><code class="language-cpp">MyFrame::MyFrame(const wxString&amp; title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(1000, 1000)){

  // [...]

  // SeaTalk-Objekt erstellen, Zeiger speichern
  this-&gt;seaTalkPtr = new SeaTalk();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/235458/speicherleck-wegen-verlorenem-pointer-wie-umgehen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 04:27:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235458.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Mar 2009 16:45:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:45:05 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Problem! Im Konstruktor meiner Frame-Klasse erzeuge ich eine Instanz der Klasse 'SeaTalk'. Der Zeiger auf das gerade erzeugte Objekt wird als private Variable in der Frame-Klasse gespeichert. Weil danach der Frame-Konstruktor zuende ist, geht der Zeiger verloren. Ein delete im Destruktor der Frame-Klasse bringt logischerweise auch nichts. Ich habe das Problem, soweit ich das sehe, verstanden. Nur wie umgeht man diese Problematik?</p>
<p>mfG, Sven</p>
<pre><code class="language-cpp">MyFrame::MyFrame(const wxString&amp; title) : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(1000, 1000)){

  // [...]

  // SeaTalk-Objekt erstellen, Zeiger speichern
  this-&gt;seaTalkPtr = new SeaTalk();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1672938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672938</guid><dc:creator><![CDATA[schwerminator]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:45:05 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:47:15 GMT]]></title><description><![CDATA[<p>schwerminator schrieb:</p>
<blockquote>
<p>Ein delete im Destruktor der Frame-Klasse bringt logischerweise auch nichts.</p>
</blockquote>
<p>Warum sollte das nichts bringen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672940</guid><dc:creator><![CDATA[feigling]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:47:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:48:23 GMT]]></title><description><![CDATA[<p>Hä? Wieso geht der Zeiger verloren, wenn er in einer Membervariablen gespeichert wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672941</guid><dc:creator><![CDATA[verwirrt]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:48:23 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:48:49 GMT]]></title><description><![CDATA[<p>wieso, du hast den pointer doch im member seatalkpointer gespeichert. wo ist das problem? Mach im Dtor der Frame-Klasse ein delete drauf und fertig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672942</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:48:49 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:49:55 GMT]]></title><description><![CDATA[<p>Wie bitte? Du speicherst den Zeiger und er geht gleichzeitig verloren? Wird Zeit dass du deine Zeiger festbindest, lol.<br />
Mal kurzes Beispiel:</p>
<pre><code class="language-cpp">class Foo
{
private:
  int* m_p;

public:
  Foo()
  {
    m_p = new int(3);
  }

  Foo(Foo const&amp; foo)
  {
    m_p = new int(*foo.m_p);
  }

  ~Foo()
  {
    delete m_p;
  }

  Foo&amp; operator =(Foo const&amp; foo)
  {
    m_p = new int(*foo.m_p);
  }
};
</code></pre>
<p>Wo ist das Problem?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672943</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:52:26 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Wobei ich dennoch die Initialisierungsliste des Konstruktors verwenden würde <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/1672948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672948</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:52:26 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:56:38 GMT]]></title><description><![CDATA[<p>Ich glaube ich habe mich falsch ausgedrückt. Natürlich geht der Zeiger nicht verloren und ich kann ihn auch wunderbar benutzen, alles läuft, aber wenn ich im MyFrame::OnQuit() ein &quot;delete seaTalkPtr;&quot; reinschreibe, bleibt das Speicherleck bestehen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672950</guid><dc:creator><![CDATA[schwerminator]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:56:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:58:19 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Foo&amp; operator =(Foo const&amp; foo)
  {
    m_p = new int(*foo.m_p);
  }
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672954</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:58:19 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 16:59:22 GMT]]></title><description><![CDATA[<p>schwerminator schrieb:</p>
<blockquote>
<p>Ich glaube ich habe mich falsch ausgedrückt. Natürlich geht der Zeiger nicht verloren und ich kann ihn auch wunderbar benutzen, alles läuft, aber wenn ich im MyFrame::OnQuit() ein &quot;delete seaTalkPtr;&quot; reinschreibe, bleibt das Speicherleck bestehen!</p>
</blockquote>
<p>Warum?</p>
<p>Wird OnQuit nicht aufgerufen?<br />
Und waere der Destruktor nicht der bessere Platz fuer ein delete?</p>
<p>Woher weisst du dass hier ein Speicher Leck entsteht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672956</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 02 Mar 2009 16:59:22 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 17:02:52 GMT]]></title><description><![CDATA[<p>Doch OnQuit() wird aufgerufen, darin steht ja schließlich Close(), was für das Beenden des Programmes verantwortlich ist. Soll ichs dennoch mal beim Destruktor versuchen (ich wüsste jetzt nicht, wo da der Mehrwert wäre)?</p>
<p>Woher ich weiß, dass ein Speicherleck vorliegt?</p>
<pre><code>Detected memory leaks!
Dumping objects -&gt;
{1448} normal block at 0x00D50EE0, 16 bytes long.
 Data: &lt;  s             &gt; D8 A1 73 00 CD CD CD CD CD CD CD CD CD CD CD CD 
Object dump complete.
</code></pre>
<p>Dieser liegt eindeutig an der oben genannten Codestelle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672961</guid><dc:creator><![CDATA[schwerminator]]></dc:creator><pubDate>Mon, 02 Mar 2009 17:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 17:10:17 GMT]]></title><description><![CDATA[<p>Ich nehme alles zurück und behaupte das Gegenteil! Wenn ich den delete in den Destruktor schreibe, funktionierts anstandslos.</p>
<p>Danke!</p>
<p>PS: Warum meckert der Compiler hier über die Tilde? Kann man nicht von Destruktoren erben?</p>
<pre><code class="language-cpp">MyFrame::~MyFrame() : ~wxFrame(){
	delete seaTalkPtr;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1672968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672968</guid><dc:creator><![CDATA[schwerminator]]></dc:creator><pubDate>Mon, 02 Mar 2009 17:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 17:22:52 GMT]]></title><description><![CDATA[<p>schwerminator schrieb:</p>
<blockquote>
<p>Ich nehme alles zurück und behaupte das Gegenteil! Wenn ich den delete in den Destruktor schreibe, funktionierts anstandslos.</p>
<p>Danke!</p>
<p>PS: Warum meckert der Compiler hier über die Tilde? Kann man nicht von Destruktoren erben?</p>
<pre><code class="language-cpp">MyFrame::~MyFrame() : ~wxFrame(){
	delete seaTalkPtr;
}
</code></pre>
</blockquote>
<p>man kann nur von klassen erben.<br />
destruktoren aller basisklassen werden automatisch aufgerufen, wenn sie virtual deklariert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672978</guid><dc:creator><![CDATA[kyle reese]]></dc:creator><pubDate>Mon, 02 Mar 2009 17:22:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 17:26:12 GMT]]></title><description><![CDATA[<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672980</guid><dc:creator><![CDATA[schwerminator]]></dc:creator><pubDate>Mon, 02 Mar 2009 17:26:12 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 17:26:33 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Foo&amp; operator =(Foo const&amp; foo)
  {
    m_p = new int(*foo.m_p);
  }
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>rofl, geil ... das ist natürlich Unsinn <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>
<pre><code class="language-cpp">Foo&amp; operator =(Foo const&amp; foo)
{
  *m_p = *foo.m_p;
  return *this;
}
</code></pre>
<p>Nur zur Rettung meiner Ehre ... *dum di dum*<br />
Hab das wohl ein wenig zu schnell hingeworfen ...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a>,<br />
Verwende für <code>new</code> Sachen so gut wie nie die Initialisierungsliste. Ist mir zu heiss, wenn dort eine Exception fliegt.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1672981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1672981</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 02 Mar 2009 17:26:33 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 20:34:35 GMT]]></title><description><![CDATA[<p>schwerminator schrieb:</p>
<blockquote>
<p>Soll ichs dennoch mal beim Destruktor versuchen (ich wüsste jetzt nicht, wo da der Mehrwert wäre)?</p>
</blockquote>
<p>Grundsätzlich ist es üblich den Destruktor, und nichts anderes für das aufräumen zu verwenden. Und wenn du dir nicht sicher bist, könntest du Alternativ auch Smartpointer verwenden (z.B. boost::scoped_ptr, boost::shared_ptr, std::tr1::shared_ptr...), und dir das delete von deiner Stelle aus schenken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673117</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 02 Mar 2009 20:34:35 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 20:36:25 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14941">@asc</a>,<br />
Verwende für <code>new</code> Sachen so gut wie nie die Initialisierungsliste. Ist mir zu heiss, wenn dort eine Exception fliegt.</p>
</blockquote>
<p>Ich verwende grundsätzlich auf Grund der Exceptionbehandlung die Initialisierungsliste und Smartpointer (nicht zwangsläufig den &quot;teuren&quot; shared_ptr, aber eigentlich inzwischen immer einen geeigneten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673120</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 02 Mar 2009 20:36:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Mon, 02 Mar 2009 20:42:26 GMT]]></title><description><![CDATA[<p>kyle reese schrieb:</p>
<blockquote>
<p>destruktoren aller basisklassen werden automatisch aufgerufen, wenn sie virtual deklariert sind.</p>
</blockquote>
<p>Auch wenn sie nicht virtuell sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673124</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 02 Mar 2009 20:42:26 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Tue, 03 Mar 2009 08:13:19 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Foo&amp; operator =(Foo const&amp; foo)
{
  *m_p = *foo.m_p;
  return *this;
}
</code></pre>
<p>Nur zur Rettung meiner Ehre ... *dum di dum*</p>
</blockquote>
<p>Das ist immer noch falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673254</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Tue, 03 Mar 2009 08:13:19 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Tue, 03 Mar 2009 09:11:47 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Foo&amp; operator =(Foo const&amp; foo)
{
  *m_p = *foo.m_p;
  return *this;
}
</code></pre>
<p>Nur zur Rettung meiner Ehre ... *dum di dum*</p>
</blockquote>
<p>this-&gt;m_p könnte nicht initialisiert sein, und Foo::m_p ist private.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673281</guid><dc:creator><![CDATA[~terraNova]]></dc:creator><pubDate>Tue, 03 Mar 2009 09:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Tue, 03 Mar 2009 09:16:10 GMT]]></title><description><![CDATA[<p>~terraNova schrieb:</p>
<blockquote>
<p>Foo::m_p ist private.</p>
</blockquote>
<p>Inwieweit hindert diese Tatsache <strong>Foo::</strong> (!) operator= daran, auf m_p zuzugreifen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673286</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 03 Mar 2009 09:16:10 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Tue, 03 Mar 2009 17:03:53 GMT]]></title><description><![CDATA[<p>~john schrieb:</p>
<blockquote>
<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Foo&amp; operator =(Foo const&amp; foo)
{
  *m_p = *foo.m_p;
  return *this;
}
</code></pre>
<p>Nur zur Rettung meiner Ehre ... *dum di dum*</p>
</blockquote>
<p>Das ist immer noch falsch.</p>
</blockquote>
<p>Aha?<br />
Was ist daran falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673587</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 03 Mar 2009 17:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Tue, 03 Mar 2009 18:46:15 GMT]]></title><description><![CDATA[<p>Edit: Korrektur, du kopierst ja nicht die Zeiger, sondern verwendest die Zuweisung der Objekte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673636</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 03 Mar 2009 18:46:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck wegen verlorenem Pointer - Wie umgehen? on Tue, 03 Mar 2009 19:33:25 GMT]]></title><description><![CDATA[<blockquote>
<p>this-&gt;m_p könnte nicht initialisiert</p>
</blockquote>
<p>Das kann auch nicht der Fall sein. Da hätte er bereits vorher (im ctor) ein Problem bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1673666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1673666</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 03 Mar 2009 19:33:25 GMT</pubDate></item></channel></rss>