0

ポインタによって動的配列のアドレスを返すこのコードがあります..しかし、参照によって動的配列のアドレスを返すにはどうすればよいですか? ありがとうございました..

int* e(int a[][2],int rows)
{
    int *p;

    p=new int[2];

    int max,min;

    max=min=a[0][0];

    int i,j;
    for(i=0;i<rows;i++)
    {
        for(j=0;j<2;j++)
        {
            if(min>a[i][j])
                min=a[i][j];
            else if(max<a[i][j])
                max=a[i][j];
            else;
        }
    }

    p[0]=min;
    p[1]=max;
    delete []p;
    return p;
}
4

1 に答える 1

3

この場合の「動的配列のアドレスを参照で返す」はp、参照で返すことpになりますが、ローカル変数であるため、関数の終了時にメモリが解放されるため、機能しません。

あなたが本当にしたいのであれば、これはうまくいくはずです:(しかし、これがあなたがすることになっていることであり、おそらくメモリリークにつながるだろうと私は強く疑っています)

int* &e(int a[][2],int rows)
{
  int **p = new int*;
  *p = new int[2];
  ...
  return *p;
}

これは意味がないことに注意してください。

delete []p;
return p;

メモリを解放してから、そのメモリへのポインタを返します。

削除を削除するだけで、すべてが正常になります(または少なくとも正常に近くなります)。

于 2013-02-26T16:02:57.030 に答える