<?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[Assertion failed bei überladenem Operator, obwohl kein Code]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich schreibe gerade eine Klasse für mathematische Matrizen. Dafür habe ich den Multiplikations-Operator überladen. Bei der Multiplikation zweier Matrizen bekomm ich leider eine Meldung, dass eine Assertion fehlgeschlagen ist:</p>
<p><a href="http://files.planet-chewie.de/c++/assertion.jpg" rel="nofollow">http://files.planet-chewie.de/c++/assertion.jpg</a> (Screenshot)</p>
<p>Ich verwende MSVC++ in der Version 6.</p>
<p>Das seltsame ist, dass effektiv gar kein Code ausgeführt wird.<br />
Ich rufe folgende Zeile auf (m1 und m2 sind Stackobjekte der Matrix-Klasse):</p>
<pre><code class="language-cpp">Matrix m = m1 * m2;
</code></pre>
<p>Der überladene Operator sieht folgendermaßen aus (Interface und Implementation):</p>
<pre><code class="language-cpp">Matrix operator * (Matrix const m2);

Matrix Matrix::operator * (Matrix const m2)
{
	/*//Exception auslösen, falls Größe ungleich
	if (cols != m2.rows) {
		throw new EInvalidDimensions();
	}*/

	//Matrix res(rows, m2.cols);
	/*Matrix&amp; m1 = (*this);

	for(unsigned i = 1; i &lt;= rows; i++) {
		for(unsigned j = 1; j &lt;= m2.cols; j++) {
			//res(i,j) = 0;
			for(unsigned k = 1; k &lt;= cols; k++) {
				res(i,j) += m1(i,k) * m2(k,j);
			}
		}
	}*/

	return NULL;

}
</code></pre>
<p>Der komplette Code bis auf die Rückgabe ist auskommentiert, und dennoch tritt der Fehler auf!</p>
<p>Ich habe dazu leider als C++-Anfänger keine Ideen mehr, wenn jemand einen Rat hat, dann nur her damit!</p>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/122601/assertion-failed-bei-überladenem-operator-obwohl-kein-code</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 12:52:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/122601.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Oct 2005 14:15:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:15:18 GMT]]></title><description><![CDATA[<p>Hallo zusammen.</p>
<p>Ich schreibe gerade eine Klasse für mathematische Matrizen. Dafür habe ich den Multiplikations-Operator überladen. Bei der Multiplikation zweier Matrizen bekomm ich leider eine Meldung, dass eine Assertion fehlgeschlagen ist:</p>
<p><a href="http://files.planet-chewie.de/c++/assertion.jpg" rel="nofollow">http://files.planet-chewie.de/c++/assertion.jpg</a> (Screenshot)</p>
<p>Ich verwende MSVC++ in der Version 6.</p>
<p>Das seltsame ist, dass effektiv gar kein Code ausgeführt wird.<br />
Ich rufe folgende Zeile auf (m1 und m2 sind Stackobjekte der Matrix-Klasse):</p>
<pre><code class="language-cpp">Matrix m = m1 * m2;
</code></pre>
<p>Der überladene Operator sieht folgendermaßen aus (Interface und Implementation):</p>
<pre><code class="language-cpp">Matrix operator * (Matrix const m2);

Matrix Matrix::operator * (Matrix const m2)
{
	/*//Exception auslösen, falls Größe ungleich
	if (cols != m2.rows) {
		throw new EInvalidDimensions();
	}*/

	//Matrix res(rows, m2.cols);
	/*Matrix&amp; m1 = (*this);

	for(unsigned i = 1; i &lt;= rows; i++) {
		for(unsigned j = 1; j &lt;= m2.cols; j++) {
			//res(i,j) = 0;
			for(unsigned k = 1; k &lt;= cols; k++) {
				res(i,j) += m1(i,k) * m2(k,j);
			}
		}
	}*/

	return NULL;

}
</code></pre>
<p>Der komplette Code bis auf die Rückgabe ist auskommentiert, und dennoch tritt der Fehler auf!</p>
<p>Ich habe dazu leider als C++-Anfänger keine Ideen mehr, wenn jemand einen Rat hat, dann nur her damit!</p>
<p>Danke im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887139</guid><dc:creator><![CDATA[Chewie83]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:15:18 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:19:38 GMT]]></title><description><![CDATA[<p>zeig doch ein vollständiges aber minimales programm.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887144</guid><dc:creator><![CDATA[mini]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:19:38 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:22:07 GMT]]></title><description><![CDATA[<p>Als Rückgabetyp hast du Matrix angegeben, NULL sieht nicht wie ein Objekt vom Typ Matrix aus <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/887149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887149</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:26:52 GMT]]></title><description><![CDATA[<p>Nun, Du retournierst NULL, obwohl der Rückgabewert eine Matrix-Objekt ist. Also, das ist schon mal definitiv falsch!</p>
<p>Beachte die Definition von NULL</p>
<pre><code class="language-cpp">#define NULL    0
</code></pre>
<p>Vollkommen korrekt wäre dieses Codefragment:</p>
<pre><code class="language-cpp">Matrix::Matrix operator * (Matrix const &amp;m2) 
{ 
         /*
                  ...
                  ...
         */
         Matrix tmp;
         return NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/887158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887158</guid><dc:creator><![CDATA[ChrisPlusPlus]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:26:52 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:28:25 GMT]]></title><description><![CDATA[<p>OK, stimmt, so wird man es besser nachvollziehen können.<br />
Die verlinkte ZIP-Datei enthält die von mir geschriebenen Dateien, aber ohne das MSVC-Gedöns.</p>
<p><a href="http://files.planet-chewie.de/c++/Matrix.zip" rel="nofollow">http://files.planet-chewie.de/c++/Matrix.zip</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/887159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887159</guid><dc:creator><![CDATA[Chewie83]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:28:25 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:29:33 GMT]]></title><description><![CDATA[<p>return 0 -&gt; Konstruktor Matrix(0) wird implizit aufgerufen -&gt; eventuell gibts da ein assert() im Konstruktor?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887161</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:32:31 GMT]]></title><description><![CDATA[<p>Konstruktor Matrix(0) ruft init(0, 0) auf und das versucht new double[0] aufzurufen und das gibt im Debug Modus eine assertion...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887164</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:32:31 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:35:11 GMT]]></title><description><![CDATA[<p>Mit explicit wäre das nicht passiert. <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/887165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887165</guid><dc:creator><![CDATA[heise.de]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:35:11 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:38:35 GMT]]></title><description><![CDATA[<p>Edit: war mist^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887167</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:38:35 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:39:51 GMT]]></title><description><![CDATA[<p>OK, das mit der Rückgabe von NULL bzw. 0 war ein Griff ins Klo, das wollte ich nur machen, weil ich irgendwas zurückgeben wollte (das richtige Objekt zurückgeben klappte auch nicht).</p>
<p>Ich hab meine Methode jetzt etwas abgeändert:</p>
<pre><code class="language-cpp">Matrix Matrix::operator * (Matrix const m2)
{
	Matrix res(2);
	return res;

}
</code></pre>
<p>Es wird also ein Objekt erstellt und zurückgegeben.<br />
Wenn ich durch den Einzelschrittmodus durchgehe, so tritt der Fehler bei der return-Anweisung auf <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/887170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887170</guid><dc:creator><![CDATA[Chewie83]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:39:51 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:44:16 GMT]]></title><description><![CDATA[<p>Dann haperts im CopyCtor.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887172</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 07 Oct 2005 14:50:03 GMT]]></title><description><![CDATA[<p>Der CopyCtor ist nicht definiert, d.h. der Compiler generiert Dir einen. Dabei wird der Zeiger auf data kopiert. Wird jetzt eine der beiden Matrizen zerstört, wird der Speicher freigegeben und die andere hat nur noch Müll.</p>
<p>In Deinem Codestürck legst Du eine Matrix an, die beim Return in ein neues Objekt kopiert wird. Dann wird die erste Matrix zerstört und das zurückgegebene Objekt ist kaputt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/887178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/887178</guid><dc:creator><![CDATA[niemand]]></dc:creator><pubDate>Fri, 07 Oct 2005 14:50:03 GMT</pubDate></item><item><title><![CDATA[Reply to Assertion failed bei überladenem Operator, obwohl kein Code on Fri, 11 Nov 2005 17:14:50 GMT]]></title><description><![CDATA[<p>So.<br />
Ich weiß, ist schon länger her, aber am Copy-Konstruktor lags tatsächlich. Ich wusste einfach nicht, dass ich einen brauche <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>
<p>Danke allen, die geantwortet haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/915361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/915361</guid><dc:creator><![CDATA[Chewie83]]></dc:creator><pubDate>Fri, 11 Nov 2005 17:14:50 GMT</pubDate></item></channel></rss>