30/09/2018, 19:43

Cấp phát động dẫn đến lỗi "Stop working"

Em mới học hướng đối tương, dưới đây là code nhập ma trận, debug vẫn chạy, e nhập được cỡ 5~6 phần từ là bị “stop working”. Giải thích giùm e với, cảm ơn nhiều a

#include <iostream>
#include <cmath>
#include <cstdlib>
using namespace std;
class matrix {
    int **a, **b;
    int m,n,p,q;
    public : 
        matrix ();
        void input();
        void output();
        bool checkAdd ();
        bool checkMul ();
        void addMatrix ();
        void mulMatrix ();
        ~matrix ();    
};
matrix::matrix()
{
    cout << "Nhap so dong ma tran A : ";
    cin >> m; 
    cout << "Nhap so cot ma tran A : ";
    cin >> n;
    a = new int*[m];
    for ( int i = 0 ; i < m; i++ )
    {
        a[m] = new int[n];
    }
    cout <<"Nhap so dong ma tran B : ";
    cin >> p;
    cout << "Nhap so cot ma tran B : ";
    cin >> q;
    b = new int*[p];
    for ( int i = 0; i < p; i ++ )
    {
        b[p] = new int[q];        
    }
}
matrix::~matrix()
{
    cout <<"Destructed !!";
}
void matrix::input()
{
    cout << "Nhap ma tran A --> " << endl;
    for ( int i = 0 ; i < m; i++ )
    {
        for ( int j = 0 ; j < n; j ++ )
        {
            cin >> a[i][j];
        }
    }
    cout << "Nhap ma tran B --> " << endl;
    for ( int  i = 0 ; i < p ; i ++ )
    {
        for ( int j = 0; j < q; j++ )
        {
            cin >> b[i][j];
        }
    }
}
void matrix::output()
{
    cout << "Ma tran A: " << endl;
    for ( int i = 0; i < m; i ++ )
    {
        for ( int j = 0 ; j < n; j ++ )
        {
            cout << a[i][j];
        }
        cout << endl;
    }
    cout << "Ma tran B: " <<endl;
    for ( int i = 0; i < q; i ++ )
    {
        for ( int j = 0 ; j < q; j ++ )
        {
            cout << b[i][j];
        }
        cout << endl;
    }
}
bool matrix::checkAdd ()
{
    if ( m == p && n == q ) return true;
    else return false;
}
bool matrix::checkMul ()
{
    if ( n == p ) return true;
    else return false;
}
void matrix::addMatrix ()
{
    int c[m][n];
    if ( checkAdd() == false ) cout << "Khong the cong hai ma tran !! " << endl;
    else {
    for ( int i = 0 ; i < m ; i ++ )
    {
        for ( int j = 0; j < n; j ++ ) 
        {
            c[i][j] = a[i][j] + b[i][j];
            cout << c[i][j] << "	";
        }
        
        cout << "
";
    }
    }
}
void matrix::mulMatrix ()
{
    int d[m][q];
    if ( checkMul() == false ) cout << "Khong the nhan hai ma tran !! " << endl;
    else {
    for ( int i = 0 ; i < m; i ++ )
    {
        for ( int j = 0; j < q; j ++ )
        {
            d[i][j] = 0;
            for ( int k = 0 ; k < n; k ++ )
            {
                d[i][j] += a[i][k]*b[k][j];  
            } 
            cout << d[i][j] << "	";
        }
        cout << endl;
    }
}
}
int main ()
{
    matrix obj;
    obj.input();
    obj.output();
    return 0;
}
Hung viết 21:56 ngày 30/09/2018

bạn đổi dòng a[m]=new int[n]; thành a[i]=new int[n];
tương tự b[i]=new int[q];

Bài liên quan
0