Modification de la taille d'un tableau 3D avec realloc
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:
Code:
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 |
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:
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;
} |
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.
Merci d'avance pour votre aide!