C++ - 3 Dimensional Array Dynamic Allocation and Deallcation

The source code to allocate and deallocate 3 Dimensional Array dynamically is given below:

Source Code

#include <iostream>

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

template<class Type>

int Create3D_Array(Type ****pResult, int x, int y, int z)

{

Type ***p = new Type **[x];

for(int i = 0; i < x; i++)

{

p[i] = new Type *[y];

for(int j = 0; j < y; j++)

p[i][j] = new Type[z];

}

*pResult = p;

return x * y * z;

}

template<class Type>

int Delete3D_Array(Type ****pResult, int x, int y, int z)

{

Type ***p = *pResult;

for(int i = 0; i < x; i++)

for(int j = 0; j < y; j++)

delete p[i][j];

for(int i = 0; i < x; i++)

delete p[i];

delete p;

return 0;

}

void main()

{

int ***pInt = NULL;

float ***pFloat = NULL;

Create3D_Array(&pInt, 2, 4, 6);

Create3D_Array(&pFloat, 2, 3, 5);

int count = 0;

for(int i = 0; i < 2; i++)

{

for(int j = 0; j < 3; j++)

for(int k = 0; k < 5; k++)

pFloat[i][j][k] = count += 3;

}

for(int i = 0; i < 2; i++)

{

for(int j = 0; j < 3; j++)

{

for(int k = 0; k < 5; k++)

{

char buf[512];

sprintf(buf, "Array[%d][%d][%d] = %.2f\n", i, j, k, pFloat[i][j][k]);

std::cout << buf;

}

}

}

Delete3D_Array(&pFloat, 2, 3, 5);

Delete3D_Array(&pInt, 2, 4, 6);

}

Output

Array[0][0][0] = 3.00
Array[0][0][1] = 6.00
Array[0][0][2] = 9.00
Array[0][0][3] = 12.00
Array[0][0][4] = 15.00
Array[0][1][0] = 18.00
Array[0][1][1] = 21.00
Array[0][1][2] = 24.00
Array[0][1][3] = 27.00
Array[0][1][4] = 30.00
Array[0][2][0] = 33.00
Array[0][2][1] = 36.00
Array[0][2][2] = 39.00
Array[0][2][3] = 42.00
Array[0][2][4] = 45.00
Array[1][0][0] = 48.00
Array[1][0][1] = 51.00
Array[1][0][2] = 54.00
Array[1][0][3] = 57.00
Array[1][0][4] = 60.00
Array[1][1][0] = 63.00
Array[1][1][1] = 66.00
Array[1][1][2] = 69.00
Array[1][1][3] = 72.00
Array[1][1][4] = 75.00
Array[1][2][0] = 78.00
Array[1][2][1] = 81.00
Array[1][2][2] = 84.00
Array[1][2][3] = 87.00
Array[1][2][4] = 90.00