allocation dynamique / désallocation de 2D & amp; Tableaux 3D

Je sais que sur les algorithmes d'allouer/désallouer un tableau 2D de manière dynamique, mais je ne suis pas trop sûr de même pour la 3D tableaux.
Grâce à ce savoir et un peu de symétrie, je suis venu avec le code suivant.
(J'ai eu un moment difficile la visualisation en 3D au cours de codage).

Veuillez formuler des observations sur l'exactitude et de suggérer la meilleure alternative (efficacité-sage ou intuitivement, le cas échéant.
Aussi, je pense que ces deux 2D et 3D les tableaux peuvent être accessibles normalement comme les tableaux statiques comme arr2D[2][3] et
arr3D[2][3][2]. Droit?

Code 2D

//allocate a 2D array
int** allocate2D(int rows,int cols)
{
    int **arr2D;
    int i;

    arr2D = (int**)malloc(rows*sizeof(int*));
    for(i=0;i<rows;i++)
    {
        arr2D[i] = (int*)malloc(cols*sizeof(int));
    }
}

//deallocate a 2D array
void deallocate2D(int** arr2D,int rows)
{
    int i;

    for(i=0;i<rows;i++)
    {
        free(arr2D[i]);
    }

    free(arr2D);
}  

Code pour la 3D

//allocate a 3D array
int*** allocate3D(int l,int m,int n)
{
int ***arr3D;
int i,j,k;

arr3D = (int***)malloc(l * sizeof(int **));

for(i=0;i<l;i++)
{
    arr3D[i] = (int**)malloc(m * sizeof(int*));
    for(j=0;j<m;j++)
    {
        arr3D[i][j] = (int*)malloc(n*sizeof(int));
    }
}

return arr3D;
}

//deallocate a 3D array
void deallocate3D(int arr3D,int l,int m)
{
    int i,j;

    for(i=0;i<l;i++)
    {
        for(int j=0;j<m;j++)
        {
            free(arr3D[i][j]);
        }
        free(arr3D[i]);
    }
    free(arr3D);
}

source d'informationauteur Ankur