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:
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 for ( i = 0 ; i < n ; i++ ) free(matrice[i]); free(matrice);
Je vous mets mon code perso avec la création de la matrice ci-dessous.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager