Bonjour à toutes et à tous,
Il s'avère que j'ai besoin de faire un tableau à 3 dimensions à allocation dynamique.
Voici mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 char (**dateheure)[50]; //allocation dateheure = malloc(3 * sizeof(*dateheure)); for(i = 0;i<3;i++) dateheure[i] = malloc(100000*sizeof(**dateheure)); //libération for(i = 0;i<3;i++) free(dateheure[i]); free(dateheure);
Ainsi, j'ai plusieurs questions qui me turlupinent :
1°) Si au lieu de 100000, j'ai quelque chose de variable en fonction de i (ex : 100000, 500 et 30), on est bien d'accord que j'allouerai exactement (100000+500+30)*50 ?
2°) La méthode de libération est ici correcte, mais est-ce qu'un seul free(dateheure); suffirait ?
Voilà, le but étant évidemment d'avoir quelque chose du style char dateheure[3][n][50].Exemple :
Ainsi on aura déclaré un tableau de 5 tableaux de 4 entiers chacun (équivalent à int tableau[5][4]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 int (*tableau)[4]; tableau = malloc(5 * sizeof(*tableau));.
Libération de mémoire allouée
Pour libérer la mémoire, on doit utiliser la fonction free toujours, et lui donner en paramètre le pointeur sur l'espace alloué à l'aide de malloc :
La deuxième dimension sera libérée automatiquement donc pas besoin de free pour le faire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 int (*tableau)[4]; //----Allocation----- tableau = malloc(5 * sizeof(*tableau)); if(tableau == NULL){ //Notifier l'erreur exit(EXIT_FAILURE); } //----Libération en cas d'allocation réussie----- free(tableau);
Ainsi on remarque que ce type est beaucoup plus rapide d'utilisation (en terme d'allocation/libération de mémoire) du fait qu'il ne nécessite pas de boucles.
Merci d'avance,
Cordialement,
Martin.
Partager