Сначала выделите массив указателей
/* size_x is the width of the array */
int **array = (int**)calloc(size_x, sizeof(int*));
Затем выделите каждый столбец
for(int i = 0; i < size_y; i++) {
/* size_y is the height */
array[i] = (int*)calloc(size_y, sizeof(int));
}
Доступ к элементам можно получить с помощью array[i][j]
.Освобождение памяти производится в обратном порядке:
for(int i = 0; i < size_y; i++) {
free(array[i]);
}
free(array);