Multi-dimensional Dynamic Arrays

We can also create multi-dimensional dynamic arrays using malloc. This section will focus on creating two-dimensional arrays. You can get more dimensions by adapting the following process:

  1. Use malloc to create an array of pointers. Each pointer in the array will point to a row in the two-dimensional array.

For example:

//Final array will have 3 rows
int **matrix = malloc(3*sizeof(int*));
  1. Use malloc to allocate space for each row:
int i;
for (i = 0; i < 3; i++) {
	//Final array will have 4 columns
	matrix [i] = malloc(4*sizeof(int));
}
  1. Now we can treat the pointer like a traditional two-dimensional array. For example, we could set every element to 0:
int j;
for (i = 0; i < 3; i++) {
	for (j = 0; j < 4; j++) {
		matrix [i][j] = 0;
	}
}
  1. When we are done using a multi-dimensional array, we release the memory in reverse order of how we allocated it. So, first we release each row:
for (i = 0; i < 3; i++) {
	free(matrix [i]);
}

And then we release the top-level array of pointers:

free(matrix);