Witam forumowiczów,
piszę klasę macierzy i natrafiłem na ciekawy błąd przy przeciążaniu operatorów... Żeby lepiej to wytłumaczyć najpierw podam kłopotliwy kod:
class CMatrix
{
unsigned nM, nN; //wiersze, kolumny
double **Macierz;
public:
~CMatrix()
{
for (unsigned i = 0; i < this->nM; i++) delete[] this->Macierz[i];
}
friend CMatrix operator+ (const CMatrix &a, const CMatrix &b)
{
if ( (a.nM != b.nM) || (a.nN != b.nN) ) std::cout << "\nError";
else
{
CMatrix wynik(a.nM, a.nN);
for (unsigned i = 0; i < a.nM; i++)
for (unsigned j = 0; j < a.nN; j++) wynik.Macierz[i][j] = a.Macierz[i][j] + b.Macierz[i][j];
return (wynik);
}
}
};
Wykonanie tego kodu, powoduje błąd Block type is valid. Macierz wynik jest poprawnie sumowana. Czytając parę tematów doszedłem do wniosku, że problem leży w destruktorze, więc go wywaliłem :)
Program nie wyrzucił żadnego błędu. Sprawdzałem też w Menadżerze zadań czy pamięć jest prawidłowo zwalniana i... tak! I tu moje pytanie, czy nie powinno dojść do wycieku pamięci skoro nie usunąłem **Macierz, stworzonej przez operator new[], operatorem delete[]?