Member 13114343 Ответов: 0

Матричное умножение без использования функции друга


Это простое матричное умножение с использованием динамического распределения и без использования понятия функции друга. я получаю выброшенное ядро ошибки сегментации...
Плз помогите

Что я уже пробовал:

<pre>#include<iostream>

using namespace std;

class Matrix
{
     int n,m; //n-> row and m-> column
     int** M; //Matrix pointer
public:
     Matrix()
     {
       M=NULL;
     }
     Matrix(int r,int c)  //initializing matrix and its elements
   {
     n=r;
     m=c;
     M=new int* [n]; //dynamic allocation of row pointer
     for(int i=0;i<n;++i)
         M[i]=new int [m]; //dynamic allocation of column pointer
     for(int i=0;i<n;++i) //loop for  initializing the values
     {
         for(int j=0;j<m;++j)
            {
                  cout<<"\n ENTER ELEMENT "<<i<<","<<j<<" OF MATRIX :- ";
                  cin>>M[i][j];
               cout<<"\t"<<M[i][j];
            }
     }
   }
    void Change(int,int); //Change the dimensions of the current Matrix
    int Multiply(Matrix &M1, Matrix &M2); //Matrix Multiplication
    void Display(); //Display the Matrix elements
int ret_r() //return no. of rows
  {
      return n;
  }
    int ret_c() //return no. of columns
   {
      return m;
   }
   int** ret_m() //return Matrix
 {
  return M;
 }

~Matrix() //Destructor to deallocate heap memory
{
 delete M;
}
};

int main()
{
  Matrix m1(2,3); //Matrix 2*3
  Matrix m2(3,2); //Matrix 3*2
  Matrix M; //Matrix to store result
  M.Multiply(m1,m2); //Matrix Multiplication call
return 0;
}

void Matrix::Change(int r,int c)
  {
       n=r;
       m=c;
       M=new int* [n];
       for(int i=0;i<n;i++)
        M[i]=new int [m];
  }// Rows & columns change

int Matrix::Multiply(Matrix &M1, Matrix &M2)
{
   int c1=M1.ret_c();
   int r2=M2.ret_r();
   if(c1==r2)
{   int r1=M1.ret_r();
    int c2=M2.ret_c();
    int** Ma=M1.ret_m();
    int** Mb=M2.ret_m();
     Change(r1,c2);
//to create matrix of appropriate dimensions
    for(int i=0;i<r1;++i)
{
   for(int j=0;j<c2;++i)
{

      M[i][j]=0;
       for(int k=0;k<c2;k++)
{
     M[i][j]+=Ma[i][k]*Mb[k][j];
}
}
}
 Display(); //Display the elements
 return 1;
}
cout<<"\nError !!!";
return 0;
}
void Matrix::Display()
{
for(int i=0;i<n;i++)
{
  for(int j=0;j<m;j++)
{
   cout<<M[i][j]<<"\t";
}
cout<<endl;
}//Display function definition
}

Richard MacCutchan

Вам нужно использовать свой отладчик, чтобы точно определить, где происходит ошибка, и проверить, какие переменные вызывают проблему. Скорее всего, это неверный или неинициализированный указатель.

0 Ответов