Tutte le versioni di Delphi dal Delphi 2006 hanno un gestore di memoria aggiornato che è più veloce e ricco di funzionalità.
Una delle più belle funzionalità del "nuovo" gestore di memoria consente alle applicazioni di registrare (e annullare la registrazione) delle perdite di memoria previste e, facoltativamente, di segnalare perdite di memoria impreviste all'arresto del programma.
Quando si creano applicazioni WIN32 con Delphi è indispensabile assicurarsi di liberare tutti gli oggetti (memoria) creati dinamicamente.
Si verifica una perdita di memoria (o risorsa) quando il programma perde la capacità di liberare la memoria che consuma.
Il rilevamento e la segnalazione di perdite di memoria sono impostati su false per impostazione predefinita. Per abilitarlo, è necessario impostare la variabile globale ReportMemoryLeaksOnShutdown su TRUE.
Quando l'applicazione viene chiusa, se si verificano perdite di memoria impreviste, l'applicazione visualizzerà la finestra di dialogo "Perdita di memoria imprevista".
Il posto migliore per ReportMemoryLeaksOnShutdown sarebbe nel file del codice sorgente (dpr) del programma.
inizio ReportMemoryLeaksOnShutdown: = DebugHook 0; // fonte "di" Delphi Application.Initialize; Application.MainFormOnTaskbar: = True; Application.CreateForm (TMainForm, MainForm); Application.Run; fine.
Nota: sopra viene utilizzata una variabile globale DebugHook per assicurarsi che le perdite di memoria vengano visualizzate quando l'applicazione viene eseguita in modalità debug - quando si adatta F9 dall'IDE Delphi.
Avendo ReportMemoryLeaksOnShutdown impostato su TRUE, aggiungi il codice seguente nel gestore eventi OnCreate del modulo principale.
var sl: TStringList; inizio sl: = TStringList.Create; sl.Add ('Perdita di memoria!'); fine;
Esegui l'applicazione in modalità debug, esci dall'applicazione: dovresti visualizzare la finestra di dialogo Perdita di memoria.
Nota: se stai cercando uno strumento per rilevare gli errori dell'applicazione Delphi come corruzione della memoria, perdite di memoria, errori di allocazione della memoria, errori di inizializzazione delle variabili, conflitti di definizione delle variabili, errori del puntatore ... dai un'occhiata a madExcept ed EurekaLog