高手帮忙看一下这个c++代码,谢谢

c++求转置矩阵,#include<iostream>usingnamespacestd;voiddisplay(inta,intb,int**c);voidswap(i... c++求转置矩阵,#include <iostream>
using namespace std;
void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{
int m,n,**a,**b;
cin>>m>>n;
a = new int *[m];
for (int i=0;i<m;++i)
a[i]=new int [n];
for( i=0; i<m; ++i) {
for(int j=0; j<n; ++j){
cin>>a[i][j];
}
cout<<endl;
}
display (m,n,a);
swap(a,b,m,n);

display (n,m,b);
delete [] a,b;
return 0;
}
void display(int a,int b,int **c)
{
for (int i=0;i<a;++i){
for (int j=0;j<b;++j){
cout.width (4);
cout<<c[i][j];
}
cout<<endl;
}
}
void swap(int **a,int **b,int x,int y)
{
for (int i=0;i<x;++i){
for (int j=0;j<y;j++)
b[j][i]=a[i][j];
cout<<endl;
}
}
展开
 我来答
德克and德华

2013-03-27 · TA获得超过2649个赞
知道小有建树答主
回答量:1207
采纳率:100%
帮助的人:614万
展开全部

错误都在main函数中:


int main()

 int m,n,**a,**b,i;//定义i

 cin>>m>>n;

 a = new int *[m];

 b = new int *[m];//b也要分配空间

 for (int i=0;i<m;++i)

 {

  a[i]=new int [n];

  b[i]=new int [n];//b也要分配空间

 }


运行结果,如果错了的话就自己修改算法吧,细节已经没有错了

_whales
2013-03-27 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:487万
展开全部
int **&CreateMat(int **&a,int m,int n)
{ //这里没有考虑,内存用光,无法分配内存的情况!
a = new int *[m];
for (int i=0;i<m;++i)a[i]=new int [n];
return a;
}
void DestoryMat(int **&a,int m)
{
for(i=0;i<m;i++)delete[] a[i]; delete [] a;
//如果需要确保已经释放内存的指针为空, 要加上a=NULL;
}
int **LoadMat(int **a,int m,int n)
{
for( i=0; i<m; ++i)
for(int j=0; j<n; ++j)
cin>>a[i][j];

return a;
}

using namespace std;
void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{
int m,n,**a,**b;
cin>>m>>n;
CreateMat(a,m,n);
CeateMat(b,n,m); //你这一步没有做,没给指针b分配内存,b 是个野指针了
LoadMat(a,m,n);
swap(a,b,m,n);
display (b,m,n);
DestoryMat(a,m);
//delete []a,b; delete[]运算符不能这么用。
//这实际是个逗号表达式,先执行delete a[];
//后执行b;这一步没有实际执行动作,只是表达式结果为b;
要delete []a;delete []b;才可以。但是这样会有内存泄露。
//要先循环删除 a[i],b[i];才可以删除a,b;
//不然 a 删除后,原来给a[0]~a[n-1]分配的内存,无变量持有了,没有办法释放了!内存泄露!!
DestoryMat(b,n);
return 0;
}
void display(const int **c,int m,int m)
{。。。。}

void swap(int **a,int **b,int m,int n){
for (int i=0;i<m;++i)
for (int j=0;j<n;j++)
if(i<=j)b[j][i]=a[i][j];
}
PS:这里最好做个矩阵类。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qipilangfour
2013-03-27 · TA获得超过232个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:124万
展开全部
没有给b分配空间啊!

void display(int a,int b,int **c);
void swap(int **a,int **b,int x,int y);
int main()
{

int m,n,**a,**b;

cin>>m>>n;

a = new int *[m];
b = new int *[m];

for (int i=0;i<m;++i)
{

a[i]=new int [n];
b[i]=new int [n];
}

for( i=0; i<m; ++i) {

for(int j=0; j<n; ++j){

cin>>a[i][j];
cin>>b[i][j];

}

cout<<endl;

}

display (m,n,a);

swap(a,b,m,n);

display (n,m,b);

delete [] a,b;

return 0;

}

void display(int a,int b,int **c)
{

for (int i=0;i<a;++i){

for (int j=0;j<b;++j){

cout.width (4);

cout<<c[i][j];

}

cout<<endl;

}

}

void swap(int **a,int **b,int x,int y)
{

for (int i=0;i<x;++i){

for (int j=0;j<y;j++)

b[j][i]=a[i][j];

cout<<endl;

}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2013-03-27 · TA获得超过380个赞
知道小有建树答主
回答量:618
采纳率:50%
帮助的人:223万
展开全部
a = new int *[m];
下面加上一句
b=new int*[n];
然后在swap 改成:
void swap(int **a,int **b,int x,int y)
{
for (int i=0;i<y;++i)
b[i]=new int[x];
for (int i=0;i<x;++i){
for (int j=0;j<y;j++)
b[j][i]=a[i][j];
cout<<endl;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式