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,mx,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,它指向内存的一部分,有矩阵谎言。但当我回到主要,我丢失矩阵,我没有删除它。为什么我失去了矩阵?
如果我在主要功能中执行此操作
x=new int*[mx];
for(i=0;i<mx;i++)
x[i]=new int[nx];
一切都是对的
答案 0 :(得分:2)
x
按值传递给input
; input
对x
本身所做的任何修改都不会在input
之外看到。 (提示:尝试printf("%p\n", x)
内外input
)。因此,如果您希望通过对代码的最少修改来解决它,则必须在此处使用三重间接(即int ***x
)并将&x
传递给input
。但这是一种非常C-ish的做事方式;在C ++中,最好定义自己的Matrix
类并使用它。
答案 1 :(得分:2)
使用
void input(int & **x,int& m,int &n)
而不是
void input(int **x,int& m,int &n)
即。通过引用而不是按值传递x
。
答案 2 :(得分:1)
void input(int **x,int& m,int &n)
{
int i,j;
x=new int*[mx];
...
mx和nx来自哪里? 据我所知,它们是未定义的。
答案 3 :(得分:1)
在功能输入中将int** x
更改为int**& x
。