Bonjour!
J'ai un petit problème concernant les tableaux en 3 dimensions dynamiques. Mon but est d'avoir un tableau 3D et d'ensuite modifier sa taille à l'aide d'une fonction. J'ai déjà alloué la mémoire pour mon tableau avec le code suivant:
Je veux ensuite envoyer le tableau carte à une fonction qui en modifie la taille (des 2 premières dimensions, la 3e reste de 3). Je sais comment procéder avec un tableau d'une dimension en utilisant realloc, mais à 3, je bloque. J'imagine que je dois utiliser un code du genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 //Création du tableau carte à 3 dimensions carte = (int ***)malloc(sizeof(int **) * NB_BLOCS_HAUTEUR*2); for (i = 0 ; i < NB_BLOCS_HAUTEUR*2; i++) { carte[i] = (int **)malloc(sizeof(int *) * NB_BLOCS_LARGEUR*2); for (j = 0; j < NB_BLOCS_LARGEUR*2; j++) carte[i][j] = (int *)malloc(sizeof(int) * 3); } if (carte == NULL) //On test si l'allocation a fonctionné exit(0); //Si non, on quitte
Ce code ne fonctionne cependant pas. J'imagine que mon utilisation de realloc est mauvaise, surtout que je lui envoie les trois fois le même pointeur carte, alors qu'il me semble que ce ne devrais pas être le cas, mais j'ignore quel pointeur envoyer sinon. Je suis un peu perdu dans tous ces pointeurs de pointeurs de pointeurs... Si vous avez des suggestions de code pour modifier les tailles d'un tableau à 3 dimensions, j'aimerais bien que vous me l'expliquiez.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 changeCarteSize(carte, rows, cols); //Appel de la fonction (correct, j'espère) int changeCarteSize(int ***carte, int rows, int cols) { int i = 0, j = 0, k = 0; //Création du tableau carte à 3 dimensions carte = (int ***)realloc(carte, sizeof(int **) * rows); for (i = 0 ; i < rows; i++) { carte[i] = (int **)realloc(carte, sizeof(int *) * cols); for (j = 0; j < cols; j++) carte[i][j] = (int *)realloc(carte, sizeof(int) * 3); } if (carte == NULL) //On test si l'allocation a fonctionné exit(0); //Si non, on quitte return 1; }
Merci d'avance pour votre aide!
Partager