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
0