<?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[finde das Speicherleck nicht]]></title><description><![CDATA[<p>Ich habe Simulationsdaten die in einem Array fester Größe gespeichert werden.<br />
Das was darin fertigberechnet wurde wird an eine Plot Klasse übergeben und dort als Kopie gespeichert. Davon wird dann intern vom mit einer 'clone'-Funktion nochmal eine Kopie erstellt.</p>
<p>Ich habe jetzt den Verdacht das die Kopie von clone nicht gelöscht wird - weiß aber nicht wie ich das bewerkstelligen sollte. Aber vielleicht ist das Leck ja noch woanders?</p>
<p>Ich komme darauf, weil das new in setData zweimal pro übergeben von Daten ausgeführt wird, das delete aber nur einmal. Im folgenden der relevante Code:</p>
<p>Holen der Daten, übergeben an Plot und löschen der geholten Daten:</p>
<pre><code class="language-cpp">void MainWindow::updateHistory()
{
	int SizeX;
	int SizeY;

	double * TimeArray  = Laser-&gt;simulation.getTimeArray(SizeX, SizeY);

	SpectrogramPlot1-&gt;setData(TimeArray, SizeX, SizeY); 
	SpectrogramPlot1-&gt;qwtPlot-&gt;replot();

	delete [] TimeArray;
}
</code></pre>
<p>Holen der Daten aus internem Speicher</p>
<pre><code class="language-cpp">double * SimulationData::getTimeArray(int &amp; SizeX, int &amp; SizeY)
{
	SizeX = SaveIteration;
	SizeY = ArrayDataPoints - 1;
	double * Array = new double[SizeX * SizeY];
	memcpy(Array, TimeAmplitudeArray, SizeX * SizeY * sizeof(double));
	return Array;
}
</code></pre>
<p>weiterreichen im Plot</p>
<pre><code class="language-cpp">void QSpectrogramPlot::setData(double * Array, int sizex, int sizey)
{
	m_RasterData.setData(Array, sizex, sizey); // SpectrogramData
...
}
</code></pre>
<p>SpectrogramData Klasse inlkusive setData und clone</p>
<pre><code class="language-cpp">class SpectrogramData: public QwtRasterData
{
private:
	double * m_Array;
...

public:
	// Constructor giving back the QwtRasterData Constructor
    SpectrogramData(): QwtRasterData()
    {
		m_Array = NULL;
    }

    ~SpectrogramData()
    {
		if (m_Array != NULL)
			delete [] m_Array;
    }

    virtual QwtRasterData *copy() const
    {
        SpectrogramData *clone = new SpectrogramData();
		clone-&gt;setRangeX(m_RangeX.min, m_RangeX.max);
		clone-&gt;setRangeY(m_RangeY.min, m_RangeY.max);
		clone-&gt;setBoundingRect(QwtDoubleRect(m_RangeX.min, m_RangeY.min, m_RangeX.max, m_RangeY.max));
		clone-&gt;setData(m_Array, m_DataSize.x, m_DataSize.y);
		return clone;
    }

    void setData(double * Array, int sizex, int sizey)
    {
        m_DataSize.x = sizex;
        m_DataSize.y = sizey;
        int size = sizex * sizey;
        MinMaxArrayValue(Array, size, &amp;m_minValue, &amp;m_maxValue);
        if (m_Array != NULL)
            delete [] m_Array;
        m_Array = new double [size];
        memcpy(m_Array, Array, size * sizeof(double));
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/231580/finde-das-speicherleck-nicht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 19:45:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231580.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Jan 2009 21:46:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 21:47:47 GMT]]></title><description><![CDATA[<p>Ich habe Simulationsdaten die in einem Array fester Größe gespeichert werden.<br />
Das was darin fertigberechnet wurde wird an eine Plot Klasse übergeben und dort als Kopie gespeichert. Davon wird dann intern vom mit einer 'clone'-Funktion nochmal eine Kopie erstellt.</p>
<p>Ich habe jetzt den Verdacht das die Kopie von clone nicht gelöscht wird - weiß aber nicht wie ich das bewerkstelligen sollte. Aber vielleicht ist das Leck ja noch woanders?</p>
<p>Ich komme darauf, weil das new in setData zweimal pro übergeben von Daten ausgeführt wird, das delete aber nur einmal. Im folgenden der relevante Code:</p>
<p>Holen der Daten, übergeben an Plot und löschen der geholten Daten:</p>
<pre><code class="language-cpp">void MainWindow::updateHistory()
{
	int SizeX;
	int SizeY;

	double * TimeArray  = Laser-&gt;simulation.getTimeArray(SizeX, SizeY);

	SpectrogramPlot1-&gt;setData(TimeArray, SizeX, SizeY); 
	SpectrogramPlot1-&gt;qwtPlot-&gt;replot();

	delete [] TimeArray;
}
</code></pre>
<p>Holen der Daten aus internem Speicher</p>
<pre><code class="language-cpp">double * SimulationData::getTimeArray(int &amp; SizeX, int &amp; SizeY)
{
	SizeX = SaveIteration;
	SizeY = ArrayDataPoints - 1;
	double * Array = new double[SizeX * SizeY];
	memcpy(Array, TimeAmplitudeArray, SizeX * SizeY * sizeof(double));
	return Array;
}
</code></pre>
<p>weiterreichen im Plot</p>
<pre><code class="language-cpp">void QSpectrogramPlot::setData(double * Array, int sizex, int sizey)
{
	m_RasterData.setData(Array, sizex, sizey); // SpectrogramData
...
}
</code></pre>
<p>SpectrogramData Klasse inlkusive setData und clone</p>
<pre><code class="language-cpp">class SpectrogramData: public QwtRasterData
{
private:
	double * m_Array;
...

public:
	// Constructor giving back the QwtRasterData Constructor
    SpectrogramData(): QwtRasterData()
    {
		m_Array = NULL;
    }

    ~SpectrogramData()
    {
		if (m_Array != NULL)
			delete [] m_Array;
    }

    virtual QwtRasterData *copy() const
    {
        SpectrogramData *clone = new SpectrogramData();
		clone-&gt;setRangeX(m_RangeX.min, m_RangeX.max);
		clone-&gt;setRangeY(m_RangeY.min, m_RangeY.max);
		clone-&gt;setBoundingRect(QwtDoubleRect(m_RangeX.min, m_RangeY.min, m_RangeX.max, m_RangeY.max));
		clone-&gt;setData(m_Array, m_DataSize.x, m_DataSize.y);
		return clone;
    }

    void setData(double * Array, int sizex, int sizey)
    {
        m_DataSize.x = sizex;
        m_DataSize.y = sizey;
        int size = sizex * sizey;
        MinMaxArrayValue(Array, size, &amp;m_minValue, &amp;m_maxValue);
        if (m_Array != NULL)
            delete [] m_Array;
        m_Array = new double [size];
        memcpy(m_Array, Array, size * sizeof(double));
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1644184</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644184</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:47:47 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 21:51:30 GMT]]></title><description><![CDATA[<p>falls du visual studio verwendest, sieh dir mal den visual leak detector an.<br />
Der lioefert dir im Debugmode, nach dem Beenden einen callstack zu allen leaks.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644189</guid><dc:creator><![CDATA[vlad_tepesch]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:51:30 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 21:56:49 GMT]]></title><description><![CDATA[<p>vlad_tepesch schrieb:</p>
<blockquote>
<p>falls du visual studio verwendest, sieh dir mal den visual leak detector an.<br />
Der lioefert dir im Debugmode, nach dem Beenden einen callstack zu allen leaks.</p>
</blockquote>
<p>Jam ich nutze VS, aber ich sehe nicht wo ich diese Daten einsehen könnte. (Ich benutzt eine deutsche Version.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644196</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:56:49 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 21:58:54 GMT]]></title><description><![CDATA[<p>ich sehe das leck nicht auf anhieb, vielleicht bist du aber an allgemeinen verbesserungsvorschlägen interessiert?<br />
das problem wäre nicht entstanden, wenn das ganze in C++ statt in &quot;C mit klassen&quot; programmiert wäre. &lt;vector&gt; macht die ganze drecksarbeit für dich und du musst dich nicht mit new und delete rumärgern.</p>
<p>pospiech schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if (m_Array != NULL)
			delete [] m_Array;
</code></pre>
</blockquote>
<p>die prüfung kannst du dir sparen, delete auf NULL ist per definition erlaubt.</p>
<p>such mal im msdn nach &quot;leak report&quot; und/oder &quot;crt debugging&quot;. du kannst die laufzeitbibliothek anweisen, zum programmende alle leaks aufzulisten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644200</guid><dc:creator><![CDATA[naseweis]]></dc:creator><pubDate>Mon, 12 Jan 2009 21:58:54 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:10:07 GMT]]></title><description><![CDATA[<p>ich habe folgendes gefunden, aber das soll nur für pures C gelten und erzeugt bei mir auch gar keine Ausgabe:<br />
<a href="http://msdn.microsoft.com/en-us/library/e5ewb1h3.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/e5ewb1h3.aspx</a></p>
<blockquote>
<p>The primary tools for detecting memory leaks are the debugger and the C Run-Time Libraries (CRT) debug heap functions. To enable the debug heap functions, include the following statements in your program:<br />
Copy Code</p>
<pre><code class="language-cpp">#define _CRTDBG_MAP_ALLOC
#include &lt;stdlib.h&gt;
#include &lt;crtdbg.h&gt;
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1644203</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644203</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:13:16 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF);
</code></pre>
<p>ganz am anfang deiner main() bzw. WinMain() einfügen. funktioniert natürlich nur im debug-build!</p>
<p>pospiech schrieb:</p>
<blockquote>
<p>aber das soll nur für pures C gelten</p>
</blockquote>
<p>nein, das hast du falsch verstanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644207</guid><dc:creator><![CDATA[naseweis]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:19:07 GMT]]></title><description><![CDATA[<p>naseweis schrieb:</p>
<blockquote>
<pre><code class="language-cpp">_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF);
</code></pre>
<p>ganz am anfang deiner main() bzw. WinMain() einfügen. funktioniert natürlich nur im debug-build!</p>
</blockquote>
<p>folgendes Kompiliert bei mir allerdings nicht:</p>
<pre><code class="language-cpp">#define _CRTDBG_MAP_ALLOC
#include &lt;stdlib.h&gt;
#include &lt;crtdbg.h&gt;

_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF);

int main(int argc, char** argv)
{
</code></pre>
<blockquote>
<p>1&gt;.\src\main.cpp(8) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: &quot;default-int&quot; wird von C++ nicht unterstützt.<br />
1&gt;.\src\main.cpp(8) : error C2365: &quot;_CrtSetDbgFlag&quot;: Erneute Definition; vorherige Definition war &quot;Funktion&quot;.<br />
1&gt; C:\Programme\Microsoft Visual Studio 8\VC\include\crtdbg.h(981): Siehe Deklaration von '_CrtSetDbgFlag'</p>
</blockquote>
<p>naseweis schrieb:</p>
<blockquote>
<p>pospiech schrieb:</p>
<blockquote>
<p>aber das soll nur für pures C gelten</p>
</blockquote>
<p>nein, das hast du falsch verstanden.</p>
</blockquote>
<p>kann ich nicht beurteilen, steht so im Kommentar unten auf der Seite.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644212</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:21:07 GMT]]></title><description><![CDATA[<p>lies ein anfängertutorial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644215</guid><dc:creator><![CDATA[naseweis]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:21:07 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:23:24 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>In die main.. Du machst da einen Funktionsaufruf vor der main.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644219</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:23:24 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:29:43 GMT]]></title><description><![CDATA[<p>naseweis schrieb:</p>
<blockquote>
<p>lies ein anfängertutorial.</p>
</blockquote>
<p>zu was? Compiler Macros von Visual Studio/Microsoft? Nicht sehr hilfreich so ein Hinweis.</p>
<p>EDIT:</p>
<p>drakon schrieb:</p>
<blockquote>
<p>pospiech schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>In die main.. Du machst da einen Funktionsaufruf vor der main.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
</blockquote>
<p>Ja klar. Danke für den Hinweis. Ich arbeite normalerweise nie innerhalb von main.cpp...</p>
<p>Es wird übrigens mit dem code im debug Modus nie eine Ausgabe erstellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644220</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:29:43 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:32:06 GMT]]></title><description><![CDATA[<p>startest du das programm im debugger? schaust du dir den inhalt des ausgabefensters an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644225</guid><dc:creator><![CDATA[naseweis]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:32:06 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:39:02 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Ja klar. Danke für den Hinweis. Ich arbeite normalerweise nie innerhalb von main.cpp...</p>
</blockquote>
<p>Das hat mit dem nichts zu tun. Du hast einen Funktionsaufruf ausserhalb einer Funktion gemacht und das geht nun mal einfach nicht. <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/1644228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644228</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:39:02 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:41:40 GMT]]></title><description><![CDATA[<p>naseweis schrieb:</p>
<blockquote>
<p>startest du das programm im debugger? schaust du dir den inhalt des ausgabefensters an?</p>
</blockquote>
<p>Ja. Ich schaue mir im Teilfenster 'Ausgabe' den Tab 'Ausgabe' an, der nach dem Starten des Programms folgendes enthält:</p>
<blockquote>
<p>&quot;ModelockingSimulationd.exe&quot;: &quot;C:\Programme\Trillian\events.dll&quot; geladen, Keine Symbole geladen.<br />
&quot;ModelockingSimulationd.exe&quot;: &quot;C:\Programme\Trillian\msvcr71.dll&quot; geladen, Keine Symbole geladen.<br />
Der Thread 'Win32 Thread' (0xd7c) hat mit Code 0 (0x0) geendet.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1644229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644229</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:44:23 GMT]]></title><description><![CDATA[<p>die leaks werden erst beim beenden des programms ausgegeben. ansonsten fällt mir nix weiter ein, es müsste so eigtl. funktionieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644231</guid><dc:creator><![CDATA[naseweis]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:44:23 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Mon, 12 Jan 2009 22:45:04 GMT]]></title><description><![CDATA[<p>naseweis schrieb:</p>
<blockquote>
<p>die leaks werden erst beim beenden des programms ausgegeben. ansonsten fällt mir nix weiter ein, es müsste so eigtl. funktionieren.</p>
</blockquote>
<p>Dann steht da auch nicht viel mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644232</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 12 Jan 2009 22:45:04 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 06:32:23 GMT]]></title><description><![CDATA[<p>dann muss ich da mal blöd fragen: Woher weißt du denn, dass deine Applikation Leaks hat ??</p>
<p>Wenn im Output nix steht, dann dürfte es eigentlich keine Leaks geben (glaub ich zumindest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644276</guid><dc:creator><![CDATA[R3dNeXX]]></dc:creator><pubDate>Tue, 13 Jan 2009 06:32:23 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 07:10:45 GMT]]></title><description><![CDATA[<p>Bau doch mal ein Leak ein, zum Beispiel</p>
<pre><code class="language-cpp">new double;
</code></pre>
<p>Dann müsste dort nachher stehen &quot;Leaks detected! 8 Byte in Zeile ..&quot; oder so ähnlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644284</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Jan 2009 07:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 07:21:52 GMT]]></title><description><![CDATA[<p>R3dNeXX schrieb:</p>
<blockquote>
<p>dann muss ich da mal blöd fragen: Woher weißt du denn, dass deine Applikation Leaks hat ??</p>
</blockquote>
<p>weil sie mit jedem Plot (jede Sekunde) ca. 2 MB Speicher verbraucht und dieser Verbrauch steil nach oben geht. In wenigen Minuten kommen da 100te von MB zusammen.</p>
<p>Folgender Code liefert mir noch immer keine Ausgabe:</p>
<pre><code class="language-cpp">//#include &lt;qt/qapplication.h&gt;
//#include &quot;MainWindow.h&quot;

#define _CRTDBG_MAP_ALLOC
#include &lt;stdlib.h&gt;
#include &lt;crtdbg.h&gt;

int main(int argc, char** argv)
{
	_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF);

	//QApplication app( argc, argv );

	//// create a new instance of MainWindow
	//MainWindow mainWindow;	
	//mainWindow.show();

	//// Enters the main event loop and waits until exit() is called 
	//// or the main widget is destroyed, and Returns the value that 
	//// was set via to exit() (which is 0 if exit() is called via quit()). 
	//return app.exec();

	double * abc = new double;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1644288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644288</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 13 Jan 2009 07:21:52 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 07:26:42 GMT]]></title><description><![CDATA[<p>Schreib nach <code>#include &lt;crtdbg.h&gt;</code> Folgendes:</p>
<pre><code class="language-cpp">#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)
</code></pre>
<p>Zudem kannst du <code>_CrtSetDbgFlag()</code> noch das Flag <code>_CRTDBG_ALLOC_MEM_DF</code> übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644290</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Jan 2009 07:26:42 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 07:40:38 GMT]]></title><description><![CDATA[<p>Ok, das geht jetzt:</p>
<pre><code class="language-cpp">define _CRTDBG_MAP_ALLOC
#include &lt;stdlib.h&gt;
#include &lt;crtdbg.h&gt;
#define new new(_NORMAL_BLOCK, __FILE__, __LINE__)

int main(int argc, char** argv)
{
	_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF);

	double * abc = new double; 
}
</code></pre>
<p>liefert mir</p>
<blockquote>
<p>Detected memory leaks!<br />
Dumping objects -&gt;<br />
.\src\main.cpp(24) : {138} normal block at 0x003F6B98, 8 bytes long.<br />
Data: &lt; &gt; CD CD CD CD CD CD CD CD<br />
Object dump complete.</p>
</blockquote>
<p>Wenn ich das im eigentlichen Programm laufen lasse. Also im einfachsten Fall dieses einmal starte und direkt wieder beende, dann bekomme ich eine sehr lange Liste von solchen Lecks.</p>
<p>Wie kann ich mir anzeigen lassen zu welchen Dateien / Variablen die gehören?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644296</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 13 Jan 2009 07:40:38 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 07:50:59 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Wie kann ich mir anzeigen lassen zu welchen Dateien / Variablen die gehören?</p>
</blockquote>
<p>Du siehst ja, in welcher Zeile und welcher Datei das Leak aufgetreten ist, dann kannst du den Fehler dort suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644304</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Jan 2009 07:50:59 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 19:04:58 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>pospiech schrieb:</p>
<blockquote>
<p>Wie kann ich mir anzeigen lassen zu welchen Dateien / Variablen die gehören?</p>
</blockquote>
<p>Du siehst ja, in welcher Zeile und welcher Datei das Leak aufgetreten ist, dann kannst du den Fehler dort suchen.</p>
</blockquote>
<p>Ich sehe weder Datei noch Zeile:</p>
<blockquote>
<p>Detected memory leaks!<br />
Dumping objects -&gt;<br />
{162014} normal block at 0x00B2F740, 60 bytes long.<br />
Data: &lt; &gt; 12 00 00 00 12 00 00 00 12 00 00 00 12 00 00 00<br />
{144095} normal block at 0x00E72FF8, 24 bytes long.<br />
Data: &lt; &gt; 01 00 00 00 02 00 00 00 00 00 00 00 01 00 00 00<br />
{162015} normal block at 0x00E6E420, 60 bytes long.<br />
Data: &lt; &gt; 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00<br />
{103487} normal block at 0x00E62910, 480 bytes long.<br />
Data: &lt; &gt; 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00<br />
{103486} normal block at 0x00E62740, 400 bytes long.<br />
...</p>
</blockquote>
<p>EDIT: Das ursprüngliche Problem habe ich nach manuellem Suchen nach new Anweisungen auch finden können. Es fehlte, wie zu erwarten, ein delete.<br />
Und es hatte auch nichts mit dem Code zu tun, den ich gepostet hatte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644815</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 13 Jan 2009 19:04:58 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 19:07:54 GMT]]></title><description><![CDATA[<p>Ich fürchte, dass das etwas schwieriger ist die genaue Zeile rauszukriegen. Du musst halt behutsam vorgehen und immer mal wieder auf die Ausgabe schauen, wenn du dein Programm testest, dann solltest du eigl. immer Wissen, wo im Code ein Leck möglich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644825</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 13 Jan 2009 19:07:54 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 19:41:53 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Ich fürchte, dass das etwas schwieriger ist die genaue Zeile rauszukriegen. Du musst halt behutsam vorgehen und immer mal wieder auf die Ausgabe schauen, wenn du dein Programm testest, dann solltest du eigl. immer Wissen, wo im Code ein Leck möglich ist.</p>
</blockquote>
<p>Da diese Ausgabe erst nach dem Beenden des Programms generiert wird ist das schlecht möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644852</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Tue, 13 Jan 2009 19:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 20:09:39 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Ich fürchte, dass das etwas schwieriger ist die genaue Zeile rauszukriegen. Du musst halt behutsam vorgehen und immer mal wieder auf die Ausgabe schauen, wenn du dein Programm testest, dann solltest du eigl. immer Wissen, wo im Code ein Leck möglich ist.</p>
</blockquote>
<p>Da diese Ausgabe erst nach dem Beenden des Programms generiert wird ist das schlecht möglich.</p>
</blockquote>
<p>Naja. Wenn man plötzlich ein Leck hat, welches vorher noch nicht da war, dann hat das mit grosser Wahrscheinlichkeit damit zu tun, was du in den letzen paar Zeilen Code getan hast.<br />
Wenn nicht, dann kann man auch noch einen richtigen Leak Detector zur Hand nehmen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644873</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 13 Jan 2009 20:09:39 GMT</pubDate></item><item><title><![CDATA[Reply to finde das Speicherleck nicht on Tue, 13 Jan 2009 20:39:51 GMT]]></title><description><![CDATA[<p>Verwendest du da das Makro <code>new</code> falsch? Denn dass keine Informationen über Zeile und Datei vorhanden sind, scheint mir komisch.</p>
<p>Prüf doch mal nach, ob wirklich die Version von <code>new</code> mit den drei Parametern aufgerufen wird. Wenn das in einer anderen Übersetzungseinheit steht, könnte es komplizierter werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1644897</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1644897</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 13 Jan 2009 20:39:51 GMT</pubDate></item></channel></rss>