die dynamische Zuweisung/Freigabe von 2D & 3D-arrays

Ich weiß, über algorithmen zum reservieren/freigeben ein 2D-array dynamisch, allerdings bin ich mir auch nicht sicher ob das gleiche für 3D-arrays.
Mit diesem wissen und ein bisschen Symmetrie, kam ich mit den folgenden code.
(Ich hatte eine harte Zeit, Visualisierung in 3D, bei der Kodierung).

Bitte äußern Sie sich auf die Richtigkeit und schlage vor, keine bessere alternative (Effizienz-klug und intuitiv), falls vorhanden.
Außerdem denke ich, dass diese beiden 2D-und 3D-arrays zugegriffen werden kann wie normalerweise statische arrays wie arr2D[2][3] und
arr3D[2][3][2]. Richtig?

Code für 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 für 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);
}

InformationsquelleAutor Ankur | 2009-12-01

Schreibe einen Kommentar