问题描述
|
我在流浪。我不敢相信我的眼睛!如果我在过程输入中分配矩阵,则从过程退出后,矩阵已被删除!
void input(int **x,int& m,int &n)
{
int i,j;
x=new int*[mx];
for(i=0;i<mx;i++)
x[i]=new int[nx];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf(\"%d\",&x[i][j]);
for(i=0;i<mx;i++)
for(j=0;j<nx;j++)
printf(\"%d\",x[i][j]); - i see normal matrix
}
int main()
{
int **x,**y,mx,my,nx,ny;
int i,j;
input(x,nx);
for(i=0;i<mx;i++)
for(j=0;j<nx;j++)
printf(\"%d\",x[i][j]); - i receive a lot of stuff
return 0;
}
为什么矩阵被删除?据我了解,我转移** x,它指向内存的一部分,那里是矩阵所在。但是当我返回main时,我丢失了矩阵,但没有删除它。为什么我失去矩阵?
如果我在主要功能中这样做
x=new int*[mx];
for(i=0;i<mx;i++)
x[i]=new int[nx];
没事
解决方法
value2ѭ按值传递给
input
;无论ѭ3to对自身内部的x
进行什么修改,都不会在input
之外看到它们。 (提示:尝试在input
内部和外部printf(\"%p\\n\",x)
)。因此,如果您想以最少的代码修改来解决它,则必须在此处使用三重间接寻址(即int ***x
)并将&x
传递给input
。但这是一种非常C式的处理方式。在C ++中,最好定义自己的Matrix
类并进行处理。
,采用
void input(int & **x,int& m,int &n)
代替
void input(int **x,int &n)
即按引用而不是按值传递x
。
,void input(int **x,int &n)
{
int i,j;
x=new int*[mx];
...
MX和NX来自哪里?
据我所知,它们是不确定的。
,在功能输入中将“ 17”更改为“ 18”。