段错误

Posted martrix-revolution

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了段错误相关的知识,希望对你有一定的参考价值。

实现一个矩阵乘法,主函数有矩阵类m1,m2,m3,重载 * ,运行结果正确却有段错误,求解 ???

#include<iostream>
#include<iomanip>
using namespace std;

class matrix{
    private:
        int row;
        int column;
        int **mat;
    public:
        matrix(int r=0,int c=0);
        void display();
        ~matrix();
        void import();
        friend matrix operator * (matrix &a,matrix &b);
};

matrix::matrix(int r,int c):row(r),column(c){
    if(row==0 || column==0) mat=NULL;
    else {mat=new int *[row]; for(int i=0;i<row;i++) mat[i]=new int[column];}
}
void matrix::import(){
    for(int i=0;i<row;i++)
    for(int j=0;j<column;j++)
    cin>>mat[i][j];
}
void matrix::display(){
    for(int i=0;i<row;i++){
        for(int j=0;j<column;j++){
            cout<<setw(10)<<mat[i][j];
        }
        cout<<endl;
    }
}

matrix operator * (matrix &a,matrix &b){
    matrix c(a.row,b.column);
    if(a.column!=b.row) cout<<"Invalid Matrix multiplication!"<<endl;
    for(int i=0;i<a.row;i++){
        for(int j=0;j<b.column;j++){
            for(int k=0;k<a.column;k++){
                c.mat[i][j] += (a.mat[i][k]*b.mat[k][j]);
            }
        }
    }
    return c;
}

matrix::~matrix(){
    for(int i=0;i<row;i++)
        delete [] mat[i];
    delete [] mat;
}

int main(){
    int r1,c1,r2,c2;
    cin>>r1>>c1;
    matrix m1(r1,c1);
    m1.import();
    cin>>r2>>c2;
    matrix m2(r2,c2);
    m2.import();
    matrix m3(r1,c2);
    m3=m1*m2;
    m3.display();
    return 0;
}

以上是关于段错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码会泄露? (简单的代码片段)

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

如何理解这段代码片段中的两对括号?

运行/调试你的PHP代码

php 在Yoast SEO中更改或删除OpenGraph输出的代码片段。此代码中有多个代码段。

片段中的Android Studio RecyclerView [重复]