0

2D 配列を動的に割り当て、それを何らかの計算に使用し、それをスタック上の result という名前の変数に配置し、2D 配列の割り当てを解除するコードがあります。なぜこれが機能するのか、後で割り当てを解除できるグローバル 2D 配列を使用するのではなく、この方法でプログラミングするのが良い方法なのか疑問に思っていました。

{

        int *matrix = new int[5];

        for(row = 0; row<array_size+1;row++)
        {
            subSolution[row] = new (nothrow) int[request+1];
            if(subSolution[row] == NULL)
               return -1;
        }
        //do some stuff

        result = subSolution[1][request];

        for(row = 0; row<array_size+1; row++ )
            delete [] subSolution[row];

        delete [] subSolution;

        return result;

}

ありがとう

4

2 に答える 2

0

あなたが私たちに提供した情報は次のとおりです。

  • おそらくマトリックスと呼ばれる動的に割り当てられた2D配列があり、関数から戻る前に解放すると言います。
  • int result = matrix[i][j]あなたが言うように、スタックに格納されていることを示すコードがあります。

配列を返していません。配列の int を返している[i][j]ので、これは完全に有効なコードです。

もしあなたが持っていたら

int** result = matrix;
delete matrix;
// ...
int i = result[5][3];

これにより、未定義の動作が発生します。メモリは関数によって解放されているため、その場所には何でもある可能性があります。メモリが何も踏まれていない場合、メモリは完璧に見えるか、完全に破損している可能性があります.

于 2013-05-07T05:46:23.963 に答える