Witam, muszę napisać program mnożący 2 macierze ze sobą, jeśli to możliwe. Mam do dyspozycji strukturę zawierającą wymiary macierzy oraz dynamiczną tablicę dwuwymiarową. Wszystko niby jest ok, przeszukałem już wiele postów, forów i stosując te same rozwiązania program nie mnoży macierzy nawet kwadratowych... Bardzo prosiłbym o sprawdzenie kodu, szczególnie funkcji MnozenieMacierzy gdyż po zakomentowaniu części tej funkcji program normalnie działa, w sensie tworzy macierze, wypisuje je dla sprawdzenia itd.

 #include <iostream>
using namespace std;

struct tablica{
	int wys, szer;
	int **tab2;
};

void PodajWymiary(tablica & macierzA, tablica & macierzB, tablica & macierzC);
void StworzMacierz(tablica  macierzA, tablica  macierzB);
bool CzyMnozenie(tablica macierzA, tablica macierzB);
tablica MnozenieMacierzy(tablica macierzA, tablica macierzB, tablica macierzC);



int main()
{
	tablica macierzA; 
	tablica macierzB;
	tablica macierzC;
	bool sprawdzenie;

	PodajWymiary(macierzA, macierzB, macierzC);
	StworzMacierz(macierzA, macierzB);
	
	sprawdzenie = CzyMnozenie(macierzA, macierzB);
	cout << endl << sprawdzenie << endl << endl;

	// SPRAWDZENIE WARUNKU CZY MOŻNA POMNOŻYC MACIERZE
	if(sprawdzenie == true)
	{
	macierzC = MnozenieMacierzy(macierzA, macierzB, macierzC);
	}
	else cout << "Tych macierzy nie da sie pomnozyc!\n\n";

}

void PodajWymiary(tablica & macierzA, tablica & macierzB, tablica & macierzC)
{
	cout << "Podaj wymiary macierzy pierwszej: ";
	cin >> macierzA.szer;
	cin >> macierzA.wys;
	cout << endl;

	cout << "Podaj wymiary macierzy drugiej: ";
	cin >> macierzB.szer;
	cin >> macierzB.wys;
	cout << endl;

	macierzC.szer = macierzB.szer;
        // AUTOMATYCZNIE MACIERZ WYNIKOWA DOSTAJE JUZ WYMIARY TAKIE JAKIE POWINNY BYC
	macierzC.wys = macierzA.wys;
}

void StworzMacierz(tablica macierzA, tablica macierzB)
{
	//STWORZENIE MACIERZY A
	macierzA.tab2 = new int*[macierzA.szer];
	for (int i = 0; i < macierzA.szer; i++)
		macierzA.tab2[i] = new int[macierzA.wys];

	//WYPEŁNIENIE MACIERZY A
	for (int i = 0; i < macierzA.szer; i++)
	{
		cout << endl;
		for (int j = 0; j < macierzA.wys; j++)
		{
			macierzA.tab2[i][j] = i+j;
			cout << macierzA.tab2[i][j];
		}
	}
	cout << endl << endl;

	//STWORZENIE MACIERZY B
	macierzB.tab2 = new int*[macierzB.szer];
	for (int j = 0; j < macierzB.szer; ++j)
		macierzB.tab2[j] = new int[macierzB.wys];

	//WYPELNIENIE MACIERZY B
	for (int i = 0; i < macierzB.szer; i++)
	{
		cout << endl;
		for (int j = 0; j < macierzB.wys; j++)
		{
			macierzB.tab2[i][j] = i+j+2;
			cout << macierzB.tab2[i][j];
		}
	}

	cout << "\n\nStworzono macierze!\n";
}

bool CzyMnozenie(tablica macierzA, tablica macierzB)
{
	if (macierzA.wys == macierzB.szer) 
		return true;
	else
		return false;
}


tablica MnozenieMacierzy(tablica macierzA, tablica macierzB, tablica macierzC)
{
	//UTWORZENIE MACIERZY C
	macierzC.tab2 = new int*[macierzB.szer];
	for (int i = 0; i < macierzB.szer; i++)
		macierzC.tab2[i] = new int[macierzA.wys];

	
	//MNOZENIE MACIERZY AxB = C     TU GDZIEŚ BŁĄD!!!!
	for(int i = 0; i< macierzC.wys; i++)
	{
		for(int j = 0; j < macierzC.szer; j++)
		{
			macierzC.tab2[i][j] = 0;
			for(int k = 0; k < macierzC.wys; k++)
			{
				macierzC.tab2[i][j] += macierzC.tab2[i][j] + macierzA.tab2[i][k] * macierzB.tab2[k][j];
			}
			cout << macierzC.tab2[i][j];
		}
	} 
	return macierzC;
}