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;
}
Bài liên quan
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];