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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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