<?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[Eventuelles Speicherleck]]></title><description><![CDATA[<p>Hallo!</p>
<p>Nachdem ich eine Anwendung unter Linux compiliert habe, musste ich feststellen dass irgendwo kein Speicher freigegeben wird. Ich meine die Stelle ausgemacht zu haben, kann mir aber nicht erklären was syntaktisch jetzt falsch ist:</p>
<pre><code class="language-cpp">/ ----------------------------------------------------------------------------
void SignalGenerator::TransmitMessage(const std::list&lt;const DBG::CMessage*&gt; &amp;CMessageList)
// ----------------------------------------------------------------------------
{
	std::list&lt;const DBG::CMessage*&gt;::const_iterator it = CMessageList.begin();
	std::list&lt;const DBG::CMessage*&gt;::const_iterator itEnd = CMessageList.end();

	while(it != itEnd)
	{			
		// Hier hab ich alles auskommentiert, Speicherleck ist immer noch da
		delete (*it);  // Hab ich hier einen Denkfehler?
		++it;
	}

	// [...]
}
</code></pre>
<p>Deaktivierei ch die Nachrichtenausgabe so wird auch kein neuer Speicher angesprochen. Hier liegt also irgendwo der Fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220659/eventuelles-speicherleck</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 23:48:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220659.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Aug 2008 11:13:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 11:13:23 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Nachdem ich eine Anwendung unter Linux compiliert habe, musste ich feststellen dass irgendwo kein Speicher freigegeben wird. Ich meine die Stelle ausgemacht zu haben, kann mir aber nicht erklären was syntaktisch jetzt falsch ist:</p>
<pre><code class="language-cpp">/ ----------------------------------------------------------------------------
void SignalGenerator::TransmitMessage(const std::list&lt;const DBG::CMessage*&gt; &amp;CMessageList)
// ----------------------------------------------------------------------------
{
	std::list&lt;const DBG::CMessage*&gt;::const_iterator it = CMessageList.begin();
	std::list&lt;const DBG::CMessage*&gt;::const_iterator itEnd = CMessageList.end();

	while(it != itEnd)
	{			
		// Hier hab ich alles auskommentiert, Speicherleck ist immer noch da
		delete (*it);  // Hab ich hier einen Denkfehler?
		++it;
	}

	// [...]
}
</code></pre>
<p>Deaktivierei ch die Nachrichtenausgabe so wird auch kein neuer Speicher angesprochen. Hier liegt also irgendwo der Fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567474</guid><dc:creator><![CDATA[MemoryLeak123]]></dc:creator><pubDate>Tue, 19 Aug 2008 11:13:23 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 11:36:22 GMT]]></title><description><![CDATA[<p>Was ist DBG::CMessage? Hat das einen Destruktor? Oder ist gar nur ein typedef für ein Char-Array?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567483</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 19 Aug 2008 11:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 11:39:24 GMT]]></title><description><![CDATA[<p>MemoryLeak123 schrieb:</p>
<blockquote>
<p>...musste ich feststellen dass irgendwo kein Speicher freigegeben wird....</p>
</blockquote>
<p>Wie meinst Du das denn, festgestellt zu haben ?<br />
&quot;ps&quot; o.ä. Tools sind da nicht selten irreführend.<br />
Wenn natürlich Deine Maschine &quot;lahmgelegt&quot; wird, wäre das schon was Anderes ...</p>
<p>Ach ja: Nicht selten liegt so ein Fehler darin, dass die umschließende Funktion (hier: SignalGenerator::TransmitMessage()) gar nicht aufgerufen wird. Das klingt banal, aber man kann sich da schon ziemlich fies selbst ein Bein stellen (z.B. mit virtueller Funktion überschrieben).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567485</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 19 Aug 2008 11:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 11:40:59 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a> ich merke das daran das mir unter linux angezeigt wird das meine Anwendung immer mehr Speicher braucht. Und irgendwann -&gt; *bum*</p>
<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Was ist DBG::CMessage? Hat das einen Destruktor? Oder ist gar nur ein typedef für ein Char-Array?</p>
</blockquote>
<p>Ist eine Klasse, ich programmier gleich mal in den dtor eine Ausgabe. Die Frage ist: Ist meine iteratorsyntax mit dem delete so richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567486</guid><dc:creator><![CDATA[deleter5000]]></dc:creator><pubDate>Tue, 19 Aug 2008 11:40:59 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 11:45:42 GMT]]></title><description><![CDATA[<p>Sollte so richtig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567490</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Tue, 19 Aug 2008 11:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 11:52:13 GMT]]></title><description><![CDATA[<p>deleter5000 schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a> ich merke das daran das mir unter linux angezeigt wird das meine Anwendung immer mehr Speicher braucht. ...</p>
</blockquote>
<p>Das war mir schon klar. Meine Frage war, <em>wie</em> Du Dir das ansiehst.</p>
<p>deleter5000 schrieb:</p>
<blockquote>
<p>...irgendwann -&gt; *bum*...</p>
</blockquote>
<p>Schon ausprobiert ?</p>
<p>Hintergrund meiner Frage ist: Moderne Betriebssysteme werfen freigegebenen Speicher oftmals nicht direkt wieder in den &quot;frei-Pool&quot;, sondern behalten ihn erstmal belegt (geht schneller für den Fall, dass der Prozess gleich wieder welchen habe will). Er wird dann erst wieder &quot;weitervermittelt&quot;, wenn der &quot;frei-Pool&quot; zu klein geworden ist.<br />
Wirkliche Speicherlecks kann man deswegen nur mit entsprechenden Tools exakt nachweisen ... oder, wenn das OS abschmiert (was darauf hinweist, dass es NICHT der o.g. Effekt ist).<br />
Vielleicht weißt Du das alles schon, aber ich kann das bei Unregistrierten nicht wissen ... und ehrlich gesagt: Geschätzte 70% (gefühlt 98% <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="😉"
    /> ) der &quot;ich-habe-ein-Speicherleck&quot;-Posts hier sind solche &quot;Schattengefechte&quot;.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567492</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 19 Aug 2008 11:52:13 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 11:53:25 GMT]]></title><description><![CDATA[<p>Ich bekomme, wenn das Programm eine Nacht durchläuft, einen Segmentation Fault.</p>
<p>Testweise wird zyklisch immer dieselbe Anzahl an Nachrichten generiert, d.h. er dürfte nicht ständig neuen Speicher allozieren was hier aber der Fall ist.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567493</guid><dc:creator><![CDATA[deleter5000]]></dc:creator><pubDate>Tue, 19 Aug 2008 11:53:25 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 12:26:29 GMT]]></title><description><![CDATA[<p>Probiere doch mal Valgrind. Das Programm läuft dann zwar stinklangsam, aber man bekommt die meistens Speicherlöcher, Bugs direkt angezeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567517</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Tue, 19 Aug 2008 12:26:29 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 19:14:50 GMT]]></title><description><![CDATA[<p>Du gibst zwar den Speicher der Zeiger in der Liste frei, aber die Elemente bleiben in der List!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567820</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Tue, 19 Aug 2008 19:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 19:15:57 GMT]]></title><description><![CDATA[<p>lagalopex schrieb:</p>
<blockquote>
<p>Du gibst zwar den Speicher der Zeiger in der Liste frei, aber die Elemente bleiben in der List!?</p>
</blockquote>
<p>Die muss er ja nicht selber freigeben. Wenn er die Liste nicht mehr braucht,spielt es keine Rolle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567823</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 19 Aug 2008 19:15:57 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 19:17:50 GMT]]></title><description><![CDATA[<p>Mich wundert nur dass er halt eine Liste mit lauter ungültigen Zeigern behält. Und ich weiß ja auch nicht, ob er die Liste weiterverwendet oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567826</guid><dc:creator><![CDATA[lagalopex]]></dc:creator><pubDate>Tue, 19 Aug 2008 19:17:50 GMT</pubDate></item><item><title><![CDATA[Reply to Eventuelles Speicherleck on Tue, 19 Aug 2008 19:21:41 GMT]]></title><description><![CDATA[<p>lagalopex schrieb:</p>
<blockquote>
<p>Mich wundert nur dass er halt eine Liste mit lauter ungültigen Zeigern behält. Und ich weiß ja auch nicht, ob er die Liste weiterverwendet oder nicht.</p>
</blockquote>
<p>Es hat keine Auswirkung auf sein Problem, aber du hast Recht. Unsauber ist es allemal. Zumindest auf 0 setzen sollter er sie,aber am besten ist wirkilch gleich auch aus der Liste zu entfernen (erase).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1567828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1567828</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 19 Aug 2008 19:21:41 GMT</pubDate></item></channel></rss>