/* 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: ------------ Implémentation d'un détecteur de fuites de mémoire */ #include #include #include #include "New.h" // Pour allonger la taille du tableau Dse static void grossir(int); // Une classe de stockage dynamique class Dse { private: // La taille de la liste de pointeurs enum { delta = 256 }; // Pointeur vers le tas void *pfs; // Le nom du fichier pour un appel à new const char *fnom; // Le numéro de ligne pour un appel à new int noligne; // Allonger le tableau Dse friend void grossir(int); // Allocation friend void *operator new(size_t, const char *, int) throw(bad_alloc); // Libération friend void operator delete(void *) throw(); // Affichage des pointeurs alloués friend void fuite_verif(); }; // Un pointeur de la liste static Dse *plist = 0; // Le nombre de pointeurs static int plist_length = 0; // Le nombre d'allocation static int used = 0; void *operator new(size_t size, const char *file, int noligne) throw(bad_alloc) { cout << "new surdfini pour un seul element" <(malloc(new_len * sizeof(Dse))); else plist = static_cast (realloc(plist, new_len * sizeof(Dse))); if (plist == 0){ cout << "pas de tas disponible" << endl; throw bad_alloc(); } for (int i = plist_length; i < new_len; i++) // Intialise à 0 plist[i].pfs = 0; // MàJ de la nouvelle taille plist_length = new_len; } void operator delete(void *pfs) throw(){ cout << "delete surdefini pour un seul element" <