01/10/2018, 08:22
Cộng 2 ma trận bằng con trỏ 2 chiều bị lỗi bộ nhớ. các bác fix cho e vớ
Cộng 2 ma trận bằng con trỏ 2 chiều.
#include <iostream>
#include <iomanip>
using namespace std;
int m, n;
void NhapMT(int **a,char ten);
void XuatMT(int **a);
int CapPhat(int **a);
void Free(int **a);
void AddMT(int **a,int **b,int **c);
int main()
{
int **A=NULL, **B=NULL, **C=NULL;
cout << "Nhap so dong, cot cua ma tran: ";
cin >> m >> n;
if (CapPhat(A) == 0)
{
cout << "Khong cap phat duoc bo nho cho A!";
system("pause");
return 1;
}
if (CapPhat(B) == 0)
{
cout << "Khong cap phat duoc bo nho cho B!";
Free(A);
system("pause");
return 1;
}
if (CapPhat(C) == 0)
{
cout << "Khong cap phat duoc bo nho cho C!";
Free(A);
Free(B);
system("pause");
return 1;
}
//cout << "Nhap ma tran A: ";
NhapMT(A,'A');
cout << endl;
//cout << "Nhap ma tran B: ";
NhapMT(B,'B');
cout << endl;
cout << "Ma tran A+B= ";
AddMT(A,B,C);
XuatMT(C);
Free(C);
Free(B);
Free(A);
system("pause");
return 0;
}
int CapPhat(int **a)
{
int i;
a = new int*[m];
if (a == NULL) return 0;
for (i = 0; i < m; i++)
{
a[i] = new int [n];
if (a[i] == NULL) return 0;
}
return 1;
}
void Free(int **a)
{
int i;
for (i = 0; i < m; i++)
{
delete[]a[i];
}
delete[] * a;
}
void NhapMT(int **a,char ten)
{
int i,j;
cout << "Nhap ma tran " << ten << ": ";
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
cout << endl;
cout << ten << "[" << i << "]" << "[" << j << "] = ";
cin >> a[i][j];
}
}
}
void XuatMT(int **a)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
if (j == 0) cout << "|";
cout << setw(5) << a[i][j];
if (j == n-1) cout << " |
";
}
}
}
void AddMT(int **a, int **b, int **c)
{
int i, j;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
c[i][j] = a[i][j] + b[i][j];
}
}
}
Bài liên quan