No soy muy experto en C, aunque en C++ yo usaria STL. En C, lo malo (y lo bueno) es que cada dimension puede ser diferente segun la fila (en C++ tambien). Es decir, una matriz de dos dimensiones de enteros puedes pensarla como un array de arrays. Asi el primer array de la segunda dimension puede tener 5 posiciones y la otra puede tener 1000 posiciones.
Tienes un numero maximo de dimensiones para el algoritmo? Cada fila de una matriz ha de tener las mismas posiciones? Es decir, esto, para tu funcion, es legal o ilegal?
int* a = new int*[2]; //array de dos punteros
a[0] = new int[100];
a[1] = new int[3];
O solo es legal que todos los elementos de la misma dimension sean iguales?
#define MAX 2
int* a = new int*[MAX]; //array de dos punteros
for(int i=0; i < MAX; i++){
a[i] = new int[b];
}