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

时间:2011-05-24 21:45:22

标签: c++ matrix parameter-passing

我正在徘徊。我简直不敢相信自己的眼睛!如果我在程序输入中分配矩阵,退出程序后,矩阵已被删除!

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];

一切都是对的

4 个答案:

答案 0 :(得分:2)

x按值传递给input; inputx本身所做的任何修改都不会在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

相关问题