Tentative de libération de matrice
Bonjour!
Je me suis récemment lancé dans le C et me voilà avec un problème qui doit certainement avoir une solution simple.
J'ai créé une matrice(**matrice) et je veux la libérer. J'ai vu que pour ce faire il fallait libérer comme on avait alloué et j'ai suivi deux exemples qui libéraient de la même façon:
Code:
1 2 3 4
| for ( i = 0 ; i < n ; i++ )
free(matrice[i]);
free(matrice); |
J'ai donc utilisé cette façon de faire(qui me semblait logique). J'ai compilé sans erreur ni warning et j'ai lancé l'application. Mais celle-ci s'est terminée avec un code d'erreur. En chipottant, j'ai découvert que c'était en rapport avec les free() libérant la matrice. Et je ne comprends pas où se situe le problème.
Je vous mets mon code perso avec la création de la matrice ci-dessous.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| // variables
long largeur = 0, hauteur = 0; // deviendront largueur=7 et longueur=6
char ligne[50];
int i=0, j=0;
// vars pour allocation dynamique
char **level; // matrice à deux dimensions
( ... )
// CREATION DE LA MATRICE RECEVANT LE NIVEAU
// Création des cases en Y
level = malloc (hauteur * sizeof(char*)); // initialise des pointeurs vides
if (level == NULL)
{
fprintf(stderr,"Impossible d'allouer la mémoire level (en Y)");
exit(EXIT_FAILURE);
}
// Création des cases en X
for (i=0;i<largeur;i++)
{
level[i] = calloc(largeur, sizeof(char)); // calloc initialise les pointeurs à la valeur NULL
if (level[i] == NULL)
{
fprintf(stderr,"Impossible d'allouer la mémoire level[i] (en X)");
exit(EXIT_FAILURE);
}
}
( ... )
// LIBERATION DE LA MATRICE LEVEL
for ( i = 0 ; i < hauteur ; i++ )
free(level[i]);
free(level); |
D'avance merci pour vos conseils!
Cédric
PS: Je ne sais pas si ça a son importance, mais j'utilise Code::Block avec la lib SDL pour cette application