/* IFT1169 - Démonstration #7 - Gestion de la mémoire - 29 mars 2008 v2.00 M.Lokbani - modification majeure pour une compilation sans erreur avec les options -pedantic -Wall 20 mars 2006 v1.01 M.Lokbani - traduction en->fr 26 février 2006 v1.00 M.Lokbani - Extrait du livre contact: lokbani@iro.umontreal.ca Copyright (C) 1999-2008 Université de Montréal Département d'informatique et de Recherche Opérationnelle Mohamed Lokbani -- Tous Droits Réservés -- All Rights Reserved -- Description: ------------ Programme de test des fuites de mémoire Utilisation: ------------ - activation de la surdéfinition des opérateurs "new" et "delete" au niveau global: g++ -Wall -pedantic -oS -DFuite NEW.C MLEAK.C -o MLEAK.exe - utilisation de "new" et "delete" par défaut: g++ -Wall -pedantic -oS -DFuite NEW.C MLEAK.C -o MLEAK.exe */ #include #include #include "New.h" class A { public: A() { cerr << "A constr(object): " << this << endl; } ~A() { cerr << "A destr(object): " << this << endl; } void affiche() {} // Pour éviter les avertissements (warnings) }; class B { private: int *p; public: B() { p = New int; // ligne 57 cerr << "B constr(object, data): " << this << ' ' << p << endl; } ~B() { cerr << "B destr(object, data): " << this << ' ' << p << endl; // Pas de delete donc une fuite de mémoire } }; int main(){ try { // vérifier les fuites de mémoire en quittant le programme atexit(fuite_verif); A *p1 = New A; // ligne 71, pas de delete => fuite de mémoire p1->affiche(); B *p2 = New B[2]; // allocation d'un tableau delete [] p2; // libération du tableau } catch (bad_alloc& e) { e.what(); return 1; } return 0; } /********************************************************************** >g++ -Wall -pedantic -oS NEW.C MLEAK.C -o MLEAK.exe >MLEAK.exe A constr(object): 0x33e18 B constr(object, data): 0x33e9c 0x33eb0 B constr(object, data): 0x33ea0 0x33ec0 B destr(object, data): 0x33ea0 0x33ec0 B destr(object, data): 0x33e9c 0x33eb0 delete surdefini pour un tableau delete surdefini pour un seul element Nouveau: Tentative pour effacer un mauvais pointeur sur le tas: 0x33e98 >g++ -Wall -pedantic -oS -DFuite NEW.C MLEAK.C -o MLEAK.exe >MLEAK.exe new surdfini pour un seul element A constr(object): 0x33e18 new surdfini pour un tableau new surdfini pour un seul element new surdfini pour un seul element B constr(object, data): 0x34aa4 0x34ab8 new surdfini pour un seul element B constr(object, data): 0x34aa8 0x34ac8 B destr(object, data): 0x34aa8 0x34ac8 B destr(object, data): 0x34aa4 0x34ab8 delete surdefini pour un tableau delete surdefini pour un seul element Fuite memoire: Nom de fichier: MLEAK.C Numero de ligne: 71 Adresse du pointeur: 0x33e18 Fuite memoire: Nom de fichier: MLEAK.C Numero de ligne: 57 Adresse du pointeur: 0x34ab8 Fuite memoire: Nom de fichier: MLEAK.C Numero de ligne: 57 Adresse du pointeur: 0x34ac8 */