<?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[_CrtMemState Frage]]></title><description><![CDATA[<p>Jetzt bin ich doch (s.u) etwas tiefer ins Debugging eingestiegen - und habe gesehen, dass man über den _CrtMemBlockHeader einige nützliche Informationen herausfiltern kann.</p>
<p><a href="http://weseetips.com/2008/04/page/2/" rel="nofollow">http://weseetips.com/2008/04/page/2/</a></p>
<p>Theoretisch sollte man auf diese Information zurückgreifen können, indem man Memory-Zustände vergleicht.</p>
<p>Das geht auch wunderbar, etwa so:</p>
<pre><code>_CrtMemState memstate1, memstate2, memstate3 ; // empfangen die MemStates
   _CrtMemCheckpoint(&amp;memstate1) ; // macht einen Schnappschuss

  // hier taucht ein Speicherleck auf

   _CrtMemCheckpoint(&amp;memstate2) ; // macht einen Schnappschuss

// Jezrt werden die Zustände verglichen:

  if(_CrtMemDifference(&amp;memstate3, &amp;memstate1, &amp;memstate2)) 
    {
   // wenn das wahr ist, gibt es Speicherlecks
    }
</code></pre>
<p>Nach dem obigen Code müsste memstate3 jetzt die Informationen enthalten, und da der CrtMemBlockHeader ein Teil der Struktur ist, sollte man darauf zugreifen können - und sich den Namen der Datei, die Zeile, in der die Variable deklariert wurde, ausgeben lassen können.</p>
<p>Dummerweise funktioniert genau das nicht.</p>
<p>Hat jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/237592/_crtmemstate-frage</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Apr 2026 12:17:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/237592.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 31 Mar 2009 07:02:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to _CrtMemState Frage on Tue, 31 Mar 2009 07:02:55 GMT]]></title><description><![CDATA[<p>Jetzt bin ich doch (s.u) etwas tiefer ins Debugging eingestiegen - und habe gesehen, dass man über den _CrtMemBlockHeader einige nützliche Informationen herausfiltern kann.</p>
<p><a href="http://weseetips.com/2008/04/page/2/" rel="nofollow">http://weseetips.com/2008/04/page/2/</a></p>
<p>Theoretisch sollte man auf diese Information zurückgreifen können, indem man Memory-Zustände vergleicht.</p>
<p>Das geht auch wunderbar, etwa so:</p>
<pre><code>_CrtMemState memstate1, memstate2, memstate3 ; // empfangen die MemStates
   _CrtMemCheckpoint(&amp;memstate1) ; // macht einen Schnappschuss

  // hier taucht ein Speicherleck auf

   _CrtMemCheckpoint(&amp;memstate2) ; // macht einen Schnappschuss

// Jezrt werden die Zustände verglichen:

  if(_CrtMemDifference(&amp;memstate3, &amp;memstate1, &amp;memstate2)) 
    {
   // wenn das wahr ist, gibt es Speicherlecks
    }
</code></pre>
<p>Nach dem obigen Code müsste memstate3 jetzt die Informationen enthalten, und da der CrtMemBlockHeader ein Teil der Struktur ist, sollte man darauf zugreifen können - und sich den Namen der Datei, die Zeile, in der die Variable deklariert wurde, ausgeben lassen können.</p>
<p>Dummerweise funktioniert genau das nicht.</p>
<p>Hat jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1688555</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1688555</guid><dc:creator><![CDATA[Percy2000]]></dc:creator><pubDate>Tue, 31 Mar 2009 07:02:55 GMT</pubDate></item><item><title><![CDATA[Reply to _CrtMemState Frage on Tue, 31 Mar 2009 08:07:29 GMT]]></title><description><![CDATA[<p>Und we allokierst Du das Speicherleck. Bei Verwednung von new müsstest Du DEBUG_NEW (IMHO MFC) definieren bzw _malloc_dbg verwenden.<br />
Das macht man üblicherweise über entsprechende defines...</p>
<p><a href="http://msdn.microsoft.com/en-us/library/aa298452(VS.60).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa298452(VS.60).aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1688590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1688590</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 31 Mar 2009 08:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to _CrtMemState Frage on Tue, 31 Mar 2009 08:55:22 GMT]]></title><description><![CDATA[<p>schönen Dank, aber wie ich gesehen habe, ist</p>
<p>#define new DEBUG_NEW</p>
<p>eine MFC -Direktive (und gibt mir jede Menge Compilerfehler zurück)<br />
wie macht man das in einem Konsolenprogramm?</p>
<p>Ich hab's mit _msize_dbg probiert</p>
<p><a href="http://msdn.microsoft.com/en-us/library/swddftz0.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/swddftz0.aspx</a></p>
<p>aber auch da habe ich nur einen Speicherblock, der mir keinen keinen Zugriff auf die Informationen ermöglicht,</p>
<p>Vielleicht sollte ich dich noch allgemeiner fragen (und auf diese Weise meine beisherige Unkenntnis auf diesem Feld unterstreichen): Wo finde ich ein Beispielprogram, das mir zeigt, wie ich die einzelnen MemBlock auf dem Heap durchgehen - und die entsprechenden Informationen extrahieren kann (etwa: in welcher Datei wird die Variable deklariert, an welcher Stelle)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1688595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1688595</guid><dc:creator><![CDATA[Percy2000]]></dc:creator><pubDate>Tue, 31 Mar 2009 08:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to _CrtMemState Frage on Tue, 31 Mar 2009 09:07:27 GMT]]></title><description><![CDATA[<p>Schau in die MSDN!<br />
Über die entsprechenden API Funktionen findest Du auch die Links.</p>
<p>Grundsätzlich: Die Informationen über Dateinamenund Zeile werdenur eingesetzt wenn auch entsprechende Funktionen benutzt werden, die das unterstützen!</p>
<p>Bzgl. DEBUG_NEW: Aschi doch einfach in die MSDN wie es dort gemacht wird. Das ist absolut simpel. Du hast doch den Sourcecode!</p>
<p><a href="http://msdn.microsoft.com/en-us/library/1666sb98.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/1666sb98.aspx</a><br />
<a href="http://msdn.microsoft.com/en-us/library/5x0xdt8e.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/5x0xdt8e.aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1688623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1688623</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 31 Mar 2009 09:07:27 GMT</pubDate></item></channel></rss>