Toutes les versions de Delphi depuis Delphi 2006 ont un gestionnaire de mémoire mis à jour qui est plus rapide et plus riche en fonctionnalités.
L'une des plus belles fonctionnalités du "nouveau" gestionnaire de mémoire permet aux applications d'enregistrer (et de désenregistrer) les fuites de mémoire attendues et de signaler éventuellement des fuites de mémoire inattendues à l'arrêt du programme.
Lors de la création d'applications WIN32 avec Delphi, il est impératif de s'assurer que vous libérez tous les objets (mémoire) que vous créez dynamiquement.
Une fuite de mémoire (ou de ressource) se produit lorsque le programme perd la capacité de libérer la mémoire qu'il consomme.
La détection et le signalement des fuites de mémoire sont définis sur faux par défaut. Pour l'activer, vous devez définir la variable globale ReportMemoryLeaksOnShutdown sur TRUE.
Lorsque l'application est fermée, en cas de fuites de mémoire inattendues, l'application affiche la boîte de dialogue "Fuite de mémoire inattendue".
Le meilleur emplacement pour ReportMemoryLeaksOnShutdown serait dans le fichier de code source (dpr) du programme.
commencer ReportMemoryLeaksOnShutdown: = DebugHook 0; // source "par" Delphi Application.Initialize; Application.MainFormOnTaskbar: = True; Application.CreateForm (TMainForm, MainForm); Application.Run; fin.
Remarque: une variable globale DebugHook est utilisée ci-dessus pour s'assurer que les fuites de mémoire sont affichées lorsque l'application est exécutée en mode débogage - lorsque vous ajustez F9 à partir de l'IDE Delphi.
Ayant ReportMemoryLeaksOnShutdown défini sur TRUE, ajoutez le code suivant dans le gestionnaire d'événements OnCreate du formulaire principal.
var sl: TStringList; commencer sl: = TStringList.Create; sl.Add ('Fuite de mémoire!'); fin;
Exécutez l'application en mode débogage, quittez l'application - vous devriez voir la boîte de dialogue de fuite de mémoire.
Remarque: Si vous recherchez un outil pour détecter les erreurs de votre application Delphi telles que la corruption de mémoire, les fuites de mémoire, les erreurs d'allocation de mémoire, les erreurs d'initialisation de variable, les conflits de définition de variable, les erreurs de pointeur… jetez un œil à madExcept et EurekaLog