problem z klasa macierzy

0

Witam. Mam (oby)mały problem z programem. Mieliśmy napisać klasę macierzy, której wartości są liczbami zespolonymi. Napisałem program na windowsie, wszystko działało, ogólnie super miodzie itd, do momentu aż sprawdziłem go na linuksie. Problem jest taki, że po drugim wywołaniu drugiej funkcji wyskakuje segmentation fault. Prawdopodobnie mam problem z konstruktorem kopiującym. Innym podejrzanym jest funkcja przypisz. Zamieszczę fragment kodu, jeśli ktoś ma chęć i wiedzę jak mi pomóc, to będę bardzo wdzięczny ;)
Fragmenty kodu:

class Matrix {
               Complex **macierz;
               int wiersz;
               int kolumna;

void Matrix::przypisz(const Matrix &m){
     int i;
     for(i=0;i<wiersz;i++)
          delete [] macierz[i];
     delete [] *macierz;
     wiersz=m.wiersz;
     kolumna=m.kolumna;
     macierz= new Complex *[wiersz];
     for(i=0;i<wiersz;i++)
          macierz[i]= new Complex[kolumna];
     for(i=0;i<wiersz;i++)
          for(int j=0;j<kolumna;j++)
               macierz[i][j].wpisz(m.pobierz(i, j));
     return; }


Matrix::Matrix(Matrix &m) {
     int i;
     wiersz=m.wiersz;
     kolumna=m.kolumna;
     macierz= new Complex *[wiersz];
     for(i=0;i<wiersz;i++)
          macierz[i]= new Complex[kolumna];
     for(i=0;i<wiersz;i++)
          for(int j=0;j<kolumna;j++)
               macierz[i][j].wpisz(m.pobierz(i, j));
     return; }

Matrix Matrix::odejmij(Matrix m) {
     if(kolumna!=m.kolumna || wiersz!=m.wiersz) {
          cout<<"Tych macierzy nie mozna odjac, maja rozne wymiary."<<endl;
          Matrix wynik;
          return wynik; }
     Matrix wynik(wiersz, kolumna);
     for(int i=0;i<wiersz;i++)
          for(int j=0;j<kolumna;j++)
               wynik.wpisz(i,j,(macierz[i][j].odejmij(m.pobierz(i,j))));
     return wynik; }


int main(int argc, char* argv[]) {
     Matrix m1(argv[1]);
     Matrix m2(argv[2]);
     cout<<endl<<"Macierz pierwsza:"<<endl;
     m1.pokaz();
     cout<<"Macierz druga:"<<endl;     
     m2.pokaz();
     cout<<endl<<"Suma macierzy:"<<endl;
     (m1.dodaj(m2)).pokaz();               //tutaj jeszcze działa
     cout<<endl<<"Roznica macierzy:"<<endl;  
     (m2.odejmij(m1)).pokaz();            //a tutaj sie wysypuje 

Funkcja dodaj odejmij wygląda podobnie. Jeśli ktoś wie co może być nie tak to zamieniam się w słuch ;)

0
  1. tagi kolorawania składni to <code=cpp> (względnie <cpp>) a nie <code=c++>
  2. masz sporo powtarzającego się kodu. utwórz sobie metody prywatne przydzielPamiec(int col, in wier) i zwolnijOpamiec(); będzie ci łatwiej wszysto uporządkować, nam też będzie łatwiej znaleźć bład
0
  1. Zamiast funkcji odejmij i dodaj użyj przeciążenia operatora '-' i '+'
  2. Jakbyś mógł ten kod trochę uporządkować.
  3. Po wykonaniu pkt. 2, odpowiedz na pytanie, gdzie class Matrix ma zamknięcie bloku?

1 użytkowników online, w tym zalogowanych: 0, gości: 1