Interrogation sur un free() de pointeurs sur pointeurs
Bonjour à toutes et à tous :D ,
Il s'avère que j'ai besoin de faire un tableau à 3 dimensions à allocation dynamique.
Voici mon code :
Code:
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 ?
Citation:
Exemple :
Code:
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:
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.