Witam. Przy mnożeniu 2 macierzy zmienna "wart" liczy się dobrze, ale funkcja "uzupelnij" nie wpisuje dobrze wartości(tzn. wypisując w locie już są złe), przy 5 wywołaniu dla macierzy 2x2 wyskakuje błąd ochrony pamieci.
using namespace std;
class macierz{
private:
int **tab;
int szer,wys;
public:
macierz(int,int);
macierz();
~macierz();
int uzupelnij(int,int,int);
int wartosc(int,int);
void wyswietlkkol(int);
void wyswietlkwiersz(int);
void dopliku(char*);
void wyswietlall();
void wyswietlwiersz(int);
void wyswietlkol(int);
macierz (char*);
macierz operator+(macierz & m);
macierz operator-(macierz & m);
macierz operator*(macierz & m);
macierz operator*(int m);
int wysokosc();
int szerokosc();
void transponuj();
};
int macierz::wysokosc(){return wys;}
int macierz::szerokosc(){return szer;}
int macierz::uzupelnij(int s,int w,int wartosc){
if(s>szer) return 0;
if(s<=0) return 0;
if(w>wys) return 0;
if(w<=0) return 0;
tab[s-1][w-1]=wartosc;
return 1;
}
int macierz::wartosc(int s,int w){
if(s>szer) return 0;
if(s<=0) return 0;
if(w>wys) return 0;
if(w<=0) return 0;
return tab[s-1][w-1];
}
void macierz::wyswietlall(){
for(int i=0;i<wys;i++){
wyswietlwiersz(i+1);
cout << endl;
}
}
void macierz::wyswietlwiersz(int a){
for(int i=0;i<szer;i++) cout << tab[a-1][i] << " ";
}
macierz macierz::operator*(macierz & m){
if(szer!=m.wys){
macierz nowa;
return nowa;
}
macierz nowa(wys,m.szer);
int wart=0;
for(int i=0;i<m.szer;i++){
for(int j=0;j<wys;j++){
wart=0;
for(int x=0;x<m.wys;x++){
wart+=(tab[i][x]*m.tab[x][j]);
}
nowa.uzupelnij(i,j,wart);
nowa.wyswietlall();
system("PAUSE");
// cout << wart << " ";
}
}
return nowa;
}
macierz::macierz(int szerokosc,int wysokosc){
szer=szerokosc;wys=wysokosc;
tab=new int*[szer];
for(int i=0;i<szer;i++) tab[i]=new int[wys];
}
macierz::macierz(){
}
int main(){
macierz a(2,2);
a.uzupelnij(1,1,1);
a.uzupelnij(1,2,2);
a.uzupelnij(2,1,3);
a.uzupelnij(2,2,4);
macierz b(2,2);
b.uzupelnij(1,1,2);
b.uzupelnij(1,2,3);
b.uzupelnij(2,1,4);
b.uzupelnij(2,2,5);
macierz f=a*b;
f.wyswietlall();
return 0;
}
Wie ktoś co zrobiłem źle?