Librairie pour éviter les fuites memoires

Soyez le premier à donner votre avis sur cette source.

Vue 9 545 fois - Téléchargée 486 fois

Description

Lorsqu'on utilise fréquemment la fonction malloc() pour allouer de la mémoire, il peut arriver que l'on oublie de faire un free() ensuite. Dans ce cas là, le programme continue sans nous avertir. Cela peut-être très gênant parfois, car ce genre d'erreur ne se voit pas facilement.

j'ai été inspiré par les sources de Jcdjcd (ses fichiers util.h et util.c).

J'ai essayé de rendre l'utilisation de ce code le + simple possible.

attention: IL FAUT COMPILER LE PROGRAMME EN MODE DEBUG POUR VOIR LE RESULTAT

- sous gcc en utilisant la commande :

"gcc -D_DEBUG -o ./Prog ./test.c ./debug.c"

- Sous visual en sélectionnant le mode DEBUG et non RELEASE

Source / Exemple :


// petit code avec des erreurs de malloc

#include <stdio.h>
#include <stdlib.h>
#include "debug.h"

int main()
{
	int* var = NULL;
	int* var2 = NULL;
	int* var3 = NULL;

	var = (int*) malloc(sizeof(int));
	
	var2 = (int*) malloc(sizeof(int));

	// on alloue de la memoire plusieurs fois pour var3...
	var3 = (int*) malloc(3*sizeof(int));
	var3 = (int*) malloc(4*sizeof(int));

	free(var);
	free(var);
	// on oublie volontairement de liberer la memoire pour var2 et var3...

	_closedebug();
	
	return 0;
}

Conclusion :


Le résultat lorsqu'on compile en mode debug est l'apparition d'un fichier "log.txt" qui contient les erreurs de malloc().

Par exemple pour le source montré plus haut :
                          • FICHIER LOG.TXT *************


test.c(19): liberation d'un pointeur deja nul
test.c(13): pointeur non libere (adresse: 0x6020c0, nombre d'octets: 4)
test.c(15): pointeur non libere (adresse: 0x602170, nombre d'octets: 12)
test.c(16): pointeur non libere (adresse: 0x602220, nombre d'octets: 16)


J'aimerais ajouter des tas d'autres test, mais avant je voudrais bien avoir votre avis sur la façon dont c'est programmé.
Pour rendre l'utilisation facile, j'ai du faire des choses un peu limites. Donc j'aimerais bien connaître votre opinion.

Ah oui, j'ai pas mal commenté le fichier debug.c
Pensez vous qu'il y a trop de commentaires, que c'est bien ? Ou qu'ils sont mal placés ?
J'essai d'apprendre à commenter un source, mais je sais pas trop comment il faut s'y prendre pour le faire bien.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
quand l'utilisateur fait un free(NULL) (le second "free(var);"), il ne faut pas juste
l'enregistrer dans log.txt, mais carrement afficher un message d'erreur, et quitter
me programme, car ca ne sert a rien de continuer !
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29 -
perso j'utilise valgrind pour ce genre de choses, les logs y sont tres complets :)
tnt95
Messages postés
9
Date d'inscription
mardi 18 décembre 2007
Statut
Membre
Dernière intervention
25 décembre 2007
-
Je pense que le programme peut être bien utile pour les débutants commz moi mais j'ai juste un petit probléme décompression du fichier. Vos explications sont claire et pas de trop ...

Bonne continuation
shenron666
Messages postés
231
Date d'inscription
dimanche 14 septembre 2003
Statut
Membre
Dernière intervention
20 août 2014
-
JCDjcd > le second free(var) n'est pas un free(NULL) mais un free(pointeur invalide) car déjà désalloué ce qui peut générer une erreur à l'execution (runtime error) = plantage
et free(NULL) ne fait rien
cs_JCDjcd
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Statut
Membre
Dernière intervention
25 janvier 2009
2 -
oui c'est juste...
en fait moi dans mes libraries, la variable <var> aurait ete mis a NULL pour montrer que le pointeur n'est plus valide

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.