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 !