2D 配列を動的に割り当て/割り当て解除するアルゴリズムについては知っていますが、3D 配列についても同じことはよくわかりません。
この知識と少しの対称性を使用して、次のコードを思い付きました。
(コーディング中に 3D で視覚化するのに苦労しました)。
正しさについてコメントし、より良い代替案 (効率的または直感的に) を提案してください。
また、arr2D[2][3] や arr3D[2][3][2] などの静的配列と同様に、これらの 2D 配列と 3D 配列の両方に正常にアクセスできると思います
。右?
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);
}
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);
}