Assertion failed bei überladenem Operator, obwohl kein Code
-
Nun, Du retournierst NULL, obwohl der Rückgabewert eine Matrix-Objekt ist. Also, das ist schon mal definitiv falsch!
Beachte die Definition von NULL
#define NULL 0Vollkommen korrekt wäre dieses Codefragment:
Matrix::Matrix operator * (Matrix const &m2) { /* ... ... */ Matrix tmp; return NULL; }
-
OK, stimmt, so wird man es besser nachvollziehen können.
Die verlinkte ZIP-Datei enthält die von mir geschriebenen Dateien, aber ohne das MSVC-Gedöns.
-
return 0 -> Konstruktor Matrix(0) wird implizit aufgerufen -> eventuell gibts da ein assert() im Konstruktor?
MfG SideWinder
-
Konstruktor Matrix(0) ruft init(0, 0) auf und das versucht new double[0] aufzurufen und das gibt im Debug Modus eine assertion...
-
Mit explicit wäre das nicht passiert.

-
Edit: war mist^^
-
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).
Ich hab meine Methode jetzt etwas abgeändert:
Matrix Matrix::operator * (Matrix const m2) { Matrix res(2); return res; }Es wird also ein Objekt erstellt und zurückgegeben.
Wenn ich durch den Einzelschrittmodus durchgehe, so tritt der Fehler bei der return-Anweisung auf
-
Dann haperts im CopyCtor.
MfG SideWinder
-
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.
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.
-
So.
Ich weiß, ist schon länger her, aber am Copy-Konstruktor lags tatsächlich. Ich wusste einfach nicht, dass ich einen brauche
Danke allen, die geantwortet haben.