#include
#include
using namespace std;
class CreateMatrix
{
private:
int m,n,**p;
public:
void SetMatrix(int m,int n)
{
p=new int *[m]; //build m pointers and save m rows
for(int i=0;i if((p[i]=new int [n])==NULL)
exit(0);
for(int i=0;i {
for(int j=0;j cin>>p[i][j];
}
cout<<"the Matrix of you input:"<<endl;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<p[i][j]<<"\t";
cout<<endl;
}
}
void DelMatrix(int m)
{
for(int i=0;i<m;i++)
delete[]p[i];
delete[]p;
}
friend void MatrixMul(CreateMatrix &E,CreateMatrix &F,int m,int n,int t);
};
void MatrixMul(CreateMatrix &E,CreateMatrix &F,int m,int n,int t)
{
int **q;
q=new int *[m]; //build m pointers and save m rows
for(int i=0;i<m;i++)
if((q[i]=new int [n])==NULL)
exit(0);
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
for(int k=0;k<t;k++)
q[i][k]=q[i][k]+E.p[i][j]*F.p[j][k];
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cout<<q[i][j]<<" ";
}
int main()
{
CreateMatrix A,B;
int a,b,c,d;
cout<<"you must ensure b=c,that is A_matrix's column equals B_matrix's row"< cout cin>>a>>b;
cout<<"input A_matrix elements:"< A.SetMatrix(a,b);
cout cin>>c>>d;
cout<<"input B_matrix elements:"<<endl;
B.SetMatrix(c,d);
MatrixMul(A,B,a,d,b);
system("pause");
return 0;
}
该回答引用ChatGPT
您的代码中存在一些问题,主要是关于矩阵乘法的实现和内存管理的问题。以下是修复后的代码,注释中有解释:
#include <iostream>
using namespace std;
class CreateMatrix {
private:
int m, n, **p;
public:
void SetMatrix(int m, int n) {
this->m = m;
this->n = n;
p = new int*[m];
for (int i = 0; i < m; i++) {
p[i] = new int[n];
for (int j = 0; j < n; j++) {
cin >> p[i][j];
}
}
}
void DelMatrix() { // 释放矩阵内存
for (int i = 0; i < m; i++) {
delete[] p[i];
}
delete[] p;
}
friend void MatrixMul(CreateMatrix &E, CreateMatrix &F, CreateMatrix &G); // 声明友元函数
};
void MatrixMul(CreateMatrix &E, CreateMatrix &F, CreateMatrix &G) {
int m = E.m, n = F.n, t = E.n;
G.SetMatrix(m, n); // 初始化结果矩阵
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
G.p[i][j] = 0; // 结果矩阵先全部赋值为0
for (int k = 0; k < t; k++) {
G.p[i][j] += E.p[i][k] * F.p[k][j]; // 矩阵乘法公式
}
cout << G.p[i][j] << " ";
}
cout << endl;
}
}
int main() {
CreateMatrix A, B, C;
int a, b, c, d;
cout << "you must ensure b=c, that is A_matrix's column equals B_matrix's row" << endl;
cout << "input A_matrix's row and column: ";
cin >> a >> b;
cout << "input A_matrix elements:" << endl;
A.SetMatrix(a, b);
cout << "input B_matrix's row and column: ";
cin >> c >> d;
cout << "input B_matrix elements:" << endl;
B.SetMatrix(c, d);
MatrixMul(A, B, C);
A.DelMatrix(); // 释放矩阵A的内存
B.DelMatrix(); // 释放矩阵B的内存
C.DelMatrix(); // 释放结果矩阵C的内存
return 0;
}
修复后的代码在矩阵乘法时初始化了结果矩阵,并在计算乘法时按照矩阵乘法公式进行计算。在矩阵使用完毕后,还需要释放矩阵所占用的内存,以免出现内存泄漏问题。