<?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 zur Laufzeit finden?]]></title><description><![CDATA[<p>Hallo, ich habe eine Anwendung in der ich Videos mit FFMPEG laden und abspielen kann. Mir ist jedoch aufgefallen, dass wenn ich 100 Videos lade und sie anschließend wieder freigebe der reservierte Speicher nicht runter geht, bis ich die Anwendung schließe.<br />
Ich habe alles wie in diversen Anleitungen gemacht und für jeden Zeiger geschaut, dass der Speicher auch wieder freigegeben wird und trotzdem wird der Speicher nicht freigegeben.</p>
<p>Beim laden der 100 Video kommen etwa 100MB hinzu. Wenn ich sie lösche, werden alle Destruktoren aufgerufen und alle Sachen gelöscht aber der reservierte Speicher bleibt absolut konstant. Wenn ich dann erneut 100 Videos lade, kommen weitere 100MB hinzu, die nicht wieder verschwinden.</p>
<p>Ich habe die Anwendung schon mit Valgrind getestet, doch am Ende steht, dass alles freigegeben wurde... ... <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>
<p>Gibt es andere Möglichkeiten solche Speicherlecks evtl. zur Laufzeit zu finden?<br />
Oder hat jemand eine andere Idee, woran es evtl. liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276021/speicherleck-zur-laufzeit-finden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 14:05:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276021.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 25 Oct 2010 14:54:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherleck zur Laufzeit finden? on Mon, 25 Oct 2010 14:54:44 GMT]]></title><description><![CDATA[<p>Hallo, ich habe eine Anwendung in der ich Videos mit FFMPEG laden und abspielen kann. Mir ist jedoch aufgefallen, dass wenn ich 100 Videos lade und sie anschließend wieder freigebe der reservierte Speicher nicht runter geht, bis ich die Anwendung schließe.<br />
Ich habe alles wie in diversen Anleitungen gemacht und für jeden Zeiger geschaut, dass der Speicher auch wieder freigegeben wird und trotzdem wird der Speicher nicht freigegeben.</p>
<p>Beim laden der 100 Video kommen etwa 100MB hinzu. Wenn ich sie lösche, werden alle Destruktoren aufgerufen und alle Sachen gelöscht aber der reservierte Speicher bleibt absolut konstant. Wenn ich dann erneut 100 Videos lade, kommen weitere 100MB hinzu, die nicht wieder verschwinden.</p>
<p>Ich habe die Anwendung schon mit Valgrind getestet, doch am Ende steht, dass alles freigegeben wurde... ... <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>
<p>Gibt es andere Möglichkeiten solche Speicherlecks evtl. zur Laufzeit zu finden?<br />
Oder hat jemand eine andere Idee, woran es evtl. liegen könnte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1970422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1970422</guid><dc:creator><![CDATA[storm009]]></dc:creator><pubDate>Mon, 25 Oct 2010 14:54:44 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck zur Laufzeit finden? on Mon, 25 Oct 2010 15:05:35 GMT]]></title><description><![CDATA[<p>Hallo Storm,</p>
<p>das ist jetzt vielleicht nicht ganz die Antwort, die du gern hören möchtest, aber hast du schonmal in Erwägung gezogen, jedes new direkt an den ctor einer entsprechenden smart_ptr-Klasse zu übergeben, sodass du in deinem Code gar kein delete mehr brauchst?</p>
<p>Damit macht man sich das Leben (besonders wenn irgendwo exceptions fliegen) auf Dauer wesentlich leichter und wenn du nicht gerade zig Millionen Instanzen von kleinen Klassen in sehr kurzer Zeit erzeugst, sollte das auch von der Performance her kein Problem darstellen.</p>
<p>(Auch wenn das nich direkt etwas mit memleaks zu tun hat: Falls du so einen Fall mit sehr vielen kleinen Klasseninstanzen hast, wär dann übrigens ein ein small object allocator, wie der von Alexandrescu, unter Umständen günstig.)</p>
<p>Edit: Wenn du selbst natürlich gar nicht leckst, sondern irgendeine Bibliothek, die du verwendest, der Übeltäter ist, kannst du ja mal versuchen, das Problem durch ein Minimalbeispiel nachzustellen, und dann evtl. an den entsprechenden Bugtracker weitergeben.</p>
<p>Gruß<br />
Dobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1970432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1970432</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Mon, 25 Oct 2010 15:05:35 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck zur Laufzeit finden? on Mon, 25 Oct 2010 15:04:11 GMT]]></title><description><![CDATA[<p>Der Speicherverbrauch deiner Anwendung der in irgendwelchen Speichermanagern angezeigt wird, hat nur indirekt mit dem momentanen Verbrauch zu tun. Man kann es höchstens als Obergrenze sehen, was bisher maximal verbraucht wurde. Wenn du Speicher freigibst, holen sich die üblichen Betriebssysteme den Speicher nämlich nicht zurück (außer eventuell in der höchsten Not), sondern lassen ihn deinem Programm zugeordnet. Sehr häufig hat man es nämlich mit Freigaben gefolgt von neuen Reservierungen zu tun, da ist es praktisch den Speicher zwischendurch nicht gleich zurückzugeben.</p>
<p>Wenn valgrind dir sagt, dass dein Programm sauber ist, dann wird das wohl auch stimmen, das ist recht verlässlich.</p>
<p>Was hier aber komisch ist, dass beim erneuten Laden zusätzlicher Speicher gebraucht wird. Eigentlich sollte da ja wie oben erklärt der vorher genutzte Speicher erneut benutzt werden. Da valgrind trotzdem nichts findet, vermute ich mal an, dass ganz am Programmende automatisch die Destruktoren deiner Objekte aufgerufen werden und dort dann alles sauber freigegeben wird. Anscheinend geschieht dies aber nicht zu dem Zeitpunkt wo du es dir wünscht.</p>
<p>Was mir als Debugmöglichkeit einfiele ist, dass du in den Destruktor deines datenhaltenden Objekts noch eine kurze Logausgabe einbaust. Dann kannst du während des Programms gucken, ob und wann dieser aufgerufen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1970433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1970433</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 25 Oct 2010 15:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck zur Laufzeit finden? on Mon, 25 Oct 2010 15:08:30 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Da valgrind trotzdem nichts findet, vermute ich mal an, dass ganz am Programmende automatisch die Destruktoren deiner Objekte aufgerufen werden und dort dann alles sauber freigegeben wird. Anscheinend geschieht dies aber nicht zu dem Zeitpunkt wo du es dir wünscht.</p>
</blockquote>
<p>Auch Speicher, den man selbst vergessen hat freizugeben, wird ja beim Programmende vom OS zurückgeholt.<br />
Dass valgrind nix findet, ist aber natürlich schon verdächtig.<br />
Vermutlich ist deshalb tatsächlich trotzdem, wie du schon sagtest, der Zeitpunkt das Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1970439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1970439</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Mon, 25 Oct 2010 15:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck zur Laufzeit finden? on Mon, 25 Oct 2010 15:22:26 GMT]]></title><description><![CDATA[<p>Vielen Dank für die schnellen Antworten.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12051">@Dobi</a> sorry ich hab nicht geschrieben, dass ich shared_ptr von boost nutze.<br />
Die Zeiger habe ich auch nur einmal und die Destruktoren werden auch wie gesagt aufgerufen ... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a> die Logausgaben in den Destruktoren habe ich auch schon, weshalb ich mir auch sicher bin, dass diese nicht nur zum Programmende aufgerufen werden.<br />
Sowas wie eine Obergrenze hatte ich mir auch schon überlegt, aber das Problem besteht auch nur bei den FFMPEG Videos. Wenn ich andere große Objekte erstelle und dann wieder freigebe, werden sofort 100te MBs frei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1970451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1970451</guid><dc:creator><![CDATA[storm009]]></dc:creator><pubDate>Mon, 25 Oct 2010 15:22:26 GMT</pubDate></item></channel></rss>