Voilà, comme je vois souvent des débutants qui perdent là tête dès qu'ils voient une indirection double (ou plus) à allouer sur le heap (la version pile est beaucoup plus simple). je propose donc une méthode spécifique au C99 qui permet de s'affranchir des boucles for pleines de malloc à n'en plus finir.
 
Un exemple sur trois dimensions :
Code :
 - #include <stdio.h>
 - #include <stdlib.h>
 - int main(void) {
 -     unsigned dim1;
 -     unsigned dim2;
 -     unsigned dim3;
 -     puts("Entrez la taille des trois dimensions" );
 -     scanf("%u%u%u", &dim1, &dim2, &dim3);
 -     int (*tab)[dim2][dim3] = calloc(dim1 * dim2, dim3 * sizeof(int)); //allocation en une seule fois. ne pas enlever les parenthèses
 -     //ici faites bon usage du tableau, comme si il avait été déclaré normalement "int tab[dim1][dim2][dim3]"
 -     free(tab); //libération en une seule fois
 -     return 0;
 - }
 
  | 
 
Bien sur, il est possible de faire un realloc sur le tableau, mais il faudra bricoler un nouveau type à chaque fois que vous modifiez la taille des dimensions 2 et + (pas la première), ce qui signifie nouveau pointeur de tableau qui référence la zone mémoire... ou un typedef+cast. C'est donc à utiliser quand il n'y a pas trop de contraintes, car ça peut très vite devenir un code complètement illisible : à vous d'en faire bon usage !