Bonjour à tous,

Je vais aborder un sujet qui a déjà été abordé des centaines de fois. Malheureusement, je ne trouve pas ma réponse, où en tout cas pas celle qui me convienne.

Voici le code en question:

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
 
string1 = malloc ( nb_char * sizeof(*string1));
if( string1 == NULL ) 
{
     fprintf(stderr,"malloc failed in file:%s line : %s",__FILE__,__LINE__);
     exit(EXIT_FAILURE);
}
 
string2 = malloc ( nb_char * sizeof(*string2));
if( string2 == NULL ) 
{
     fprintf(stderr,"malloc failed in file:%s line : %s",__FILE__,__LINE__);
     exit(EXIT_FAILURE);
}
 
free(string1); 
string1 = NULL;
 
free(string2); 
string2 = NULL;
Je pense que tout le monde est d'accord avec les lignes que j'ai écrit ci-dessus. A propos, les lignes ci-dessous n'ont été écrites que pour illustrer mon problème.

Si le programme, se passe normalement, il n'y a pas de problème. Si le programme n'arrive pas à allouer la mémoire au premier malloc(), il y a une erreur ce qui est normale. Mais si le programme rencontre un problème au deuxième malloc(), il y a une erreur ce qui est normale, mais la memoire allouée pour le premier malloc() n'est jamais libérée.

Vous me direz je n'ai qu'à écrire:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
free(string1); 
string1 = NULL;
juste avant

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
exit(EXIT_FAILURE);
de mon deuxième malloc(). Et je suis d'accord avec vous. Mais cette méthode est bien quand on a un petit programme. Si on a beaucoup de variables allouées dynamiquement dans un gros programme, cela devient ingérable. J'aimerais donc savoir si vous avez une astuce, une méthode, ou quoique cela soit pour éviter ce genre de problème.