运算符重载,类的一个小小问题

一点点c++的学习问题

还有一个小时就到截止时间,我不太好打扰我的teacher问问题了,现在就是很想知道自己错的要怎么改,好像找到错误了
应该是运算符重载乘号哪个函数那里,调试到return c就运行不下去了


#include<iostream>
using namespace std;
int m;
class MyMatrix
{
private:
    int n;
    //friend MyMatrix opertor* (MyMatrix& m1, MyMatrix& m2);
    //int** a = new int* [n];
public:
    MyMatrix(){}

    MyMatrix(int nn)
    {
        n = nn;
    }
    //MyMatrix(1)
    friend MyMatrix operator* (MyMatrix& m1, MyMatrix& m2);
    int** arr = new int*[n];
    //for(int i=0;i<n;i++)
    void input(int n);
    void show();
    ~MyMatrix();
};

MyMatrix operator*(MyMatrix& c1,MyMatrix &c2)
{
    int i, j, k, sum;
    MyMatrix c(m);
    for (int i = 0; i < m; i++)
    {
        c.arr[i] = new int[m];
    }
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            sum = 0;
            for (k = 0; k < m; k++)
            {
                sum += c1.arr[i][k] * c2.arr[k][j];
            }
            c.arr[i][j] = sum;
        }
    }
    return c;
}

void  MyMatrix::input(int n)
{
    int i, j;
    for (int i = 0; i < n; i++)
    {
        arr[i] = new int[n];
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
        {
            cin >> *(*(arr+i)+j);
        }
    }
}

void MyMatrix::show()
{
    int i, j;
    for (i = 0; i < m; i++)
    {
        for (j = 0; j < m; j++)
        {
            cout << arr[i][j];
            cout << " ";
        }
        cout << endl;
    }
}

MyMatrix::~MyMatrix()
{
    for (int i = 0; i < n; i++)
    {
        delete[] arr[i];
    }
    delete[] arr;
}

int main()
{
    int c;
    cin >> c;
    //int n;
    cin >> m;
    MyMatrix b(m);
    b.input(m);
    for(int k=1;k<m;k++)
    {
        //cin >> m;
        
        MyMatrix a(m);
        a.input(m);
        b = b * a;
    }
    b.show();
    return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

题主基础比较差啊,像int** arr = new int*[n];这种直接在类内初始化的成员的调用会发生在构造函数之前,所以n还没赋值,n是个随机数
修改上面这个问题后,还是会崩溃,是由于没有实现拷贝构造函数,在return c的时候会生成一个临时对象,由于调用默认拷贝构造函数,此时临时对象和c都拥有二级指针arr,然后它们释放的时候,释放的是同一个资源就崩溃了
还有b = b * a;这一句话会调用拷贝赋值函数,也没实现