Accueil > > > LIBRAIRIE POUR ÉVITER LES FUITES MEMOIRES
LIBRAIRIE POUR ÉVITER LES FUITES MEMOIRES
Information sur la source
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
- // 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;
- }
// 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.
Historique
- 20 décembre 2007 02:00:12 :
- Première version
- 20 décembre 2007 17:33:22 :
- - correction d'un petit bug (un pointeur n'etait pas initialisé à NULL)
- mise à jour des commentaires
- 20 décembre 2007 17:43:27 :
- Conversion des fichiers textes au format dos avec (unix2dos) car problème d'affichage sur cppfrance.com
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Probleme d'allocation de mémoire dynamique (malloc/free) [ par PhantomPowaa ]
Bonjour,J'ai un petit probleme avec les fonctions malloc et free dans certains de mes programmes. Apparement le malloc s'effectue correctement, mais a
Pb d'allocation mémoire malloc [ par oz80 ]
Bonjour à tous, j'ai un problème d'allocation de mémoire je pense. Je déclare une variable comme ceci : <TBOD
malloc (ms vc++) [ par DeadlyPredator ]
Bonjour,J'ai une fonction:char* _fastcall strLeft(const char* lpszString, const long nLength) { char* lpszBuffer; lpszBuffer=(char*)ma
Problème avec la fonction free dans visual basic. [ par tobi222 ]
J'ai créé une liste chainée toute simple avec où j'alloue de la mémoire dynamiquement et à la fin lorsque je détrui
Question sur l'allocation de mémoire... [ par kod32 ]
Salut,j'ai une question concernant l'allocation de mémoire et notamment l'utilisation de la fonction malloc. Cette fonction permet de pointer vers un
detection des fuites mémoire [ par kimo_100 ]
j'aimerai utiliser un outil pour detecter les fuites mémoiredans mon application(en c++ sous hp ux 11).j'ai essayé avec insure,mais il ne m'a pas beau
Creation fonction malloc [ par LordBob ]
Bonjour a tous,voila en cours on est en train de faire un TP sur la gestion de la mémoire et on doit programmer la fonction malloc. Pour la partie thé
Free() veut pas désallouer.... [ par benlustr ]
Bonjour à tous, c'est encore moi Dans une fonction, j'ai deux pointeurs qui s'incrémentent dans une boucle. à la fin de la fonction, je libère les zon
Mémoire dynamique et gestion d'erreur [ par Polack77 ]
Bonjours, ma question serais que se passe t'il si je fais un free sur un pointeur non défini (ou défini à 0). Je posse cette question (qui peut pa
fuite de mémoire en C++ sous linux [ par vaniweb ]
J'ai vu un code simple pour détecter les fuites de mémoire en C: http://www.cppfrance.com/codes/LIBRAIRIE-EVITER-FUITES-MEMOIRES_45136.aspxIl y a t-il
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
Comparez les prix

HTC Hero
Entre 550€ et 550€
|