Witam. Mam problem z przeładowaniem operatora * do operacji mnożenia 2 macierzy. Program kompiluje się bez błędów, ale podczas uruchomienia się wysypuje.
Nie mam pojęcia dlaczego. W klasie mam zdefiniowany konstruktor 2- parametrowy, który rezerwuje pamieć i konstruktor kopiujacy. Przeciążenie operatora: dodawania, odejmowanie i mnożenia dla operacji mnożenia przez skalar działa u mnie bez zarzutu, a tutaj VS sie wysypuje. Jakby ktoś mógł pomóc byłbym wdzięczny. Z góry dziekuję :)
Macierz operator*(const Macierz &m1, const Macierz &m2)
{
Macierz m3(m1.kolumny, m2.wiersze);
if (m1.kolumny != m1.wiersze)
cerr << "Blad";
else
{
for (int i = 0; i < m1.wiersze; i++)
{
for (int j = 0; j < m2.kolumny; j++)
{
m3.tab[i][j] = 0;
for (int k = 0; k < m2.wiersze; i++)
{
m3.tab[i][j] = m3.tab[i][j] + m1.tab[i][k] * m2.tab[k][j];
}
}
}
return m3;
}
}
//konstuktor dwuparametrowy
Macierz::Macierz(unsigned int wier,unsigned int kol)
:wiersze(wier),kolumny(kol)
{
tab = new float *[wier];
for (int i = 0; i < wier; i++)
{
tab[i] = new float[kol];
for (int j = 0; j < kol; j++)
{
}
}
}
Macierz::Macierz(Macierz const &m) //konstruktor kopiujacy
{
wiersze = m.wiersze;
kolumny = m.kolumny;
tab = new float* [wiersze];
for (int i = 0; i < wiersze; i++)
{
tab[i] = new float[kolumny];
for (int j = 0; j < kolumny; j++)
{
}
}
for (int i = 0; i < wiersze; i++)
{
for (int j = 0; j < kolumny; j++)
{
tab[i][j] = m.tab[i][j];
}
}
}