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 ?

Exemple :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
int (*tableau)[4];
 
tableau = malloc(5 * sizeof(*tableau));
Ainsi on aura déclaré un tableau de 5 tableaux de 4 entiers chacun (équivalent à int tableau[5][4].

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 :

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);
La deuxième dimension sera libérée automatiquement donc pas besoin de free pour le faire.
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.
Voilà, le but étant évidemment d'avoir quelque chose du style char dateheure[3][n][50].

Merci d'avance,

Cordialement,

Martin.