0

たとえば、これはmain 関数から呼び出されるという名前fnx.cの関数ファイルのコードです。ダブルポインタをメイン関数に同時に返すと同時に、ここfunc()を解放するにはどうすればよいですか?TempArray

    int * * TempArray; //global variable in this file

static void CreatePointer(int row, int col) {
    int r;
    TempArray = malloc(sizeof(int * ) * (row));
    for (r = 0; r < row; r++) {
        TempArray[r] = malloc(sizeof(int) * (col));
    }
}


static void DestroyPointer() {
    free(TempArray);
    TempArray = NULL;

}

int * * func(int * * OriArray, int row, int col, int r_offset, int c_offset) {
    int r, c;

    CreatePointer(row, col);

    for (r = 0; r < row; r++) {
        for (c = 0; c < col; c++) {
            TempArray[r][c] = OriArray[r + r_offset][c + c_offset];
        }
    }

    //destroy TempArray??

    return TempArray;

}
4

3 に答える 3

0

を解放する前に、すべての行を解放する必要がありますTempArray

static void DestroyPointer (int row)
{
   for (int r = 0; r < row; r++)
   {
      free(TempArray[r]);
   }
   free(TempArray);
   TempArray = NULL;

}

ただし、ポインターを返す前にポインターを破棄しないでください。
その後でポインターを逆参照するmainと、未定義の動作が発生するためです。

于 2016-01-29T09:07:08.937 に答える