c ++将矩阵传递给程序,内存泄漏

问题描述

| 我在流浪。我不敢相信我的眼睛!如果我在过程输入中分配矩阵,则从过程退出后,矩阵已被删除!
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”。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...