<?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[Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler!]]></title><description><![CDATA[<p>Ich will mir eine kleine matrix-Bibliothek schreiben, bekomme aber bei folgendem Teil immer die Fehlermeldung &quot;Invalid Address specified to RtlFreeHeap( 00320000, 003210C8 )&quot;. Hier der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;assert.h&gt;

class Matrix
{
private:
        double *m_data;
	int m_rows, m_cols;

public:
	Matrix(int rows, int cols)
	{
		int i;
		m_rows = rows;
		m_cols = cols;
		m_data = new double[m_rows*m_cols];
		for (i = 0; i&lt;(m_rows*m_cols); i++)
			m_data[i] = 0.0;
	};

	~Matrix()
	{
		cout&lt;&lt;&quot;Determiniere&quot;&lt;&lt;endl;
		delete[] m_data;
	};

	Matrix test()	
	{
		Matrix myNew(2,2);
		cout&lt;&lt;&quot;vor return aus test()&quot;&lt;&lt;endl;
		return myNew;
	};

};

int main()
{	
	double tmp;
	Matrix myMatrix(3,3);
	myMatrix.test();
	cout&lt;&lt;&quot;nach test&quot;&lt;&lt;endl;
	cin&gt;&gt;tmp;
	return 0;
};
</code></pre>
<p>Als Bildschirmausgabe bekomme ich:<br />
vor return aus test<br />
Determiniere<br />
Determiniere</p>
<p>Wieso 2x Determiniere?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183591/destruktor-wird-zweimal-ausgeführt-gt-heap-fehler</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 09:06:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183591.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 Jun 2007 14:05:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler! on Wed, 06 Jun 2007 14:05:55 GMT]]></title><description><![CDATA[<p>Ich will mir eine kleine matrix-Bibliothek schreiben, bekomme aber bei folgendem Teil immer die Fehlermeldung &quot;Invalid Address specified to RtlFreeHeap( 00320000, 003210C8 )&quot;. Hier der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream.h&gt;
#include &lt;assert.h&gt;

class Matrix
{
private:
        double *m_data;
	int m_rows, m_cols;

public:
	Matrix(int rows, int cols)
	{
		int i;
		m_rows = rows;
		m_cols = cols;
		m_data = new double[m_rows*m_cols];
		for (i = 0; i&lt;(m_rows*m_cols); i++)
			m_data[i] = 0.0;
	};

	~Matrix()
	{
		cout&lt;&lt;&quot;Determiniere&quot;&lt;&lt;endl;
		delete[] m_data;
	};

	Matrix test()	
	{
		Matrix myNew(2,2);
		cout&lt;&lt;&quot;vor return aus test()&quot;&lt;&lt;endl;
		return myNew;
	};

};

int main()
{	
	double tmp;
	Matrix myMatrix(3,3);
	myMatrix.test();
	cout&lt;&lt;&quot;nach test&quot;&lt;&lt;endl;
	cin&gt;&gt;tmp;
	return 0;
};
</code></pre>
<p>Als Bildschirmausgabe bekomme ich:<br />
vor return aus test<br />
Determiniere<br />
Determiniere</p>
<p>Wieso 2x Determiniere?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300081</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300081</guid><dc:creator><![CDATA[WoolyPooly]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:05:55 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler! on Wed, 06 Jun 2007 14:25:48 GMT]]></title><description><![CDATA[<p>Komisch, ich bekomm vom Compiler</p>
<pre><code>Error	1	fatal error C1083: Cannot open include file: 'iostream.h': No such file or directory
</code></pre>
<p>...</p>
<p>Standard ist</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cassert&gt;

using namespace std;

/*

...

*/
</code></pre>
<p>Das erste &quot;Determiniere&quot; stammt von</p>
<pre><code class="language-cpp">Matrix test()   
{
    Matrix myNew(2,2);
    cout&lt;&lt;&quot;vor return aus test()&quot;&lt;&lt;endl;
    return myNew; /* hier */
}
</code></pre>
<p>greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300102</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler! on Wed, 06 Jun 2007 14:31:56 GMT]]></title><description><![CDATA[<p>WoolyPooly schrieb:</p>
<blockquote>
<p>Wieso 2x Determiniere?</p>
</blockquote>
<p>Wenn du zwei erzeugst, dann werden auch zwei zerstört. Siehe Zeile 29 und 39.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300112</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler! on Wed, 06 Jun 2007 14:32:35 GMT]]></title><description><![CDATA[<p>Erstmal vielen Dank für die rasche Antwort.<br />
Leider taucht der Fehler noch immer auf.</p>
<p>Ich denke, dass auch das 2. &quot;Determiniere&quot; von dem</p>
<pre><code class="language-cpp">return myNew
</code></pre>
<p>ausgelöst wird. Denn die Ausgabe &quot;nach test&quot; bekomme ich gar nicht mehr. Und erst danach dürfte ja die Matrix myMatrix gelöscht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300113</guid><dc:creator><![CDATA[WoolyPooly]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:32:35 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler! on Wed, 06 Jun 2007 14:43:06 GMT]]></title><description><![CDATA[<p>WoolyPooly schrieb:</p>
<blockquote>
<p>Erstmal vielen Dank für die rasche Antwort.<br />
Leider taucht der Fehler noch immer auf.</p>
</blockquote>
<p>Was hast du denn geändert?</p>
<blockquote>
<p>Ich denke, dass auch das 2. &quot;Determiniere&quot; von dem</p>
<pre><code class="language-cpp">return myNew
</code></pre>
<p>ausgelöst wird. Denn die Ausgabe &quot;nach test&quot; bekomme ich gar nicht mehr. Und erst danach dürfte ja die Matrix myMatrix gelöscht werden.</p>
</blockquote>
<p>Wieso bekommst du die Ausgabe &quot;nach test&quot; nicht?<br />
Ach so, dein Debugger kickt dich raus, weil du delete [] auf ein pointer, der irgendwo ins nichts verweist, aufrufst. Wie wäre es einfach mal den Copy-C'tor zu implementieren. Dann würdest du korrekt drei &quot;determiniere&quot; bekommen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300117</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:43:06 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler! on Wed, 06 Jun 2007 14:38:29 GMT]]></title><description><![CDATA[<p>Wieso gibt der D'tor überhaupt &quot;Determiniere&quot; = &quot;bestimme&quot; aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300120</guid><dc:creator><![CDATA[Helium]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler! on Wed, 06 Jun 2007 14:43:51 GMT]]></title><description><![CDATA[<p>Einmal wird ein Destruktor(dtor) aufgerufen weil in test() ein lokales Objekt des Klasse Matrix erstellst und dies beim Verlassen des Blocks (hier also der Funktion test()) destruiert wird.</p>
<p>Dann verwirfst Du den Rückgabewert von test() - zweiter dtor-Aufruf für das zurückgegebene Objekt.</p>
<p>Dein Code kann so nicht funktionieren; in test() wird implizit der Default-Copy-Konstruktor von Matrix aufgerufen; der erzeugt aber nicht automatisch das Feld das Du später mit delete[] wieder löscht!</p>
<p>Das solltest Du ändern indem Du einen eigenen Copy-Konstruktor &quot;Matrix(const Matrix**&amp;** old)&quot; definierst und auch darin das Feld erzeugst.</p>
<p>Btw. &quot;Destruieren&quot; und nicht &quot;Determinieren&quot;.</p>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300122</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:43:51 GMT</pubDate></item><item><title><![CDATA[Reply to Destruktor wird zweimal ausgeführt -&amp;gt; Heap-Fehler! on Wed, 06 Jun 2007 14:58:01 GMT]]></title><description><![CDATA[<p>Vielen vielen Dank.<br />
Jetzt funzt's.</p>
<p>Und gut: Determiniere ist falsch. De-(struiere)+Terminiere = Determiniere <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="😉"
    /><br />
Zum Debuggen hats aber den gleichen Sinn erfüllt.</p>
<p>Vielen Dank nochmal...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1300135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1300135</guid><dc:creator><![CDATA[WoolyPooly]]></dc:creator><pubDate>Wed, 06 Jun 2007 14:58:01 GMT</pubDate></item></channel></rss>