Komunikat, który pokazuje się przy odpalaniu programu:
[code]---------------------------
Microsoft Visual C++ Debug Library
Debug Assertion Failed!
Program: E:\Jakub\Projekty\VC\Macierz\Macierz\Debug\Macierz.exe
File: dbgdel.cpp
Line: 47
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
Przerwij Ponów próbę Ignoruj
---------------------------[/code]
Fragment kodu, przy którym takie coś się pojawia:
CComplex CComplex::operator*(CComplex &c)
{
if (FCol != c.FRow)
{
CComplex *result = NULL;
return *result;
}
CMatrix c1 = *FReMacierz*(*(c.FReMacierz));
CMatrix c2 = *FImMacierz*(*(c.FImMacierz));
CMatrix c3 = *FReMacierz*(*(c.FImMacierz));
CMatrix c4 = *FImMacierz*(*(c.FReMacierz));
c1 -= c2;
c3 += c4;
CComplex result(&c1, &c3, FRow, c.FCol);
return result;
}
Po usunięciu linijki:
CComplex result(&c1, &c3, FRow, c.FCol);
Wszystko gra.
Odpowiedni konstruktor:
CComplex::CComplex(CMatrix *c1, CMatrix *c2, int row, int col)
{
FReMacierz = c1;
FImMacierz = c2;
FRow = row;
FCol = col;
}
Wydaje mi się, że problem jest z przypisaniem. Po zastąpieniu c1 i c2 przez NULL wszystko gra (zresztą nic w tym dziwnego).
Podam jeszcze destruktory (bo to może być z nimi problem):
CComplex::~CComplex()
{
if (FReMacierz)
delete FReMacierz;
if (FImMacierz)
delete FImMacierz;
}
CMatrix::~CMatrix()
{
for (int i=0; i<FRow; i++)
if (FArray[i])
delete FArray[i];
if (FArray)
delete FArray;
}
Będę wdzięczny za wszelką pomoc.
A i jeszcze coś. Błąd jest wystarczająco skuteczny, że jedyne co widzę na Context to jest NTDLL... i inne bajerki spoza mojego programu.