C++ 指针和 table

C++ pointers and table

我正在学习 C++,我想编写一个使用指针分配 2D table 的程序。这是我的代码:

bool b_alloc_table_2_dim(int ***piTable, int iSizeX, int iSizeY)
{
    if ((iSizeX && iSizeY) > 0)
    {
        *piTable = new int* [iSizeX];

        for (int i = 0; i < iSizeX; i++)
            (*piTable)[i] = new int[iSizeY];

        return true;
    }
    else return false;
}
bool b_dealloc_table_2_dim(int **piTable, int iSizeX)
{
    if (iSizeX > 0)
    {
        for (int i = 0; i < iSizeX; i++)
            delete[] piTable[i];
        delete[] piTable;

        return true;
    }
    else return false; 
}

分配 table 后,我想取消分配它。我遇到了这个问题“HEAP[TEP_Lab1.exe]:指定给 RtlValidateHeap(00DB0000, 00DB5B68) 的地址无效”。我不知道如何解决这个问题。 请帮忙!

int main()
{   
    int** piTable;
    
    b_alloc_table_2_dim(&piTable, 5, 3);
 
    b_dealloc_table_2_dim(piTable, 5);
}

这个例子很适合你:

int **dynamicArray = 0;
dynamicArray = new int *[ROWS];

// memory allocated for  elements of each column.  
for( int i = 0 ; i < ROWS ; i++ ) {
    dynamicArray[i] = new int[COLUMNS];
}

// free the allocated memory 
for( int i = 0 ; i < ROWS ; i++ ) {
    delete [] dynamicArray[i];
}
delete [] dynamicArray;

现在您的更正代码是

bool b_alloc_table_2_dim(int **piTable, int iSizeX, int iSizeY)
{
    if ((iSizeX && iSizeY) > 0)
    {
        piTable = new int* [iSizeX];

        for (int i = 0; i < iSizeX; i++)
            piTable[i] = new int[iSizeY];

        return true;
    }
    else return false;
}
bool b_dealloc_table_2_dim(int **piTable, int iSizeX)
{
    if (iSizeX > 0)
    {
        for (int i = 0; i < iSizeX; i++)
            delete[] piTable[i];
        delete[] piTable;

        return true;
    }
    else return false; 
}


int main()
{   
    int** piTable;

    b_alloc_table_2_dim(piTable, 5, 3);

    b_dealloc_table_2_dim(piTable, 5);
}