2008-11-03 4 views
4

Je reçois le message de fuite de mémoire lors de l'arrêt, en disant que je fuis 3 d'un certain objet. Deux problèmes avec ça, cependant.Pourquoi le gestionnaire de mémoire de Delphi signale-t-il de fausses fuites de mémoire à l'arrêt?

  1. Cela ne se produit que par intermittence. Je peux exécuter mon programme, suivre exactement la même série d'étapes, (ouvrir un fichier de données, l'afficher et le fermer à nouveau, et parfois le message apparaîtra et parfois il ne le sera pas. Il n'y a aucun appel à random() ou autre logique "non-déterministe" le long de ces chemins de code.

  2. La revue de code indique que la fuite de mémoire signalée est impossible; l'objet n'est créé que dans une certaine classe, et il est libéré correctement dans le destructeur de cette classe. (Et j'instancier beaucoup plus que trois objets de la classe parente. Et sans exception sont soulevées pendant le nettoyage.)

Ajout des sorties de traçage au constructeur et destructor pour ce spectacle de classe que chaque objet créé est détruit, même avec le gestionnaire de mémoire rapportant autrement. Je ne peux donc que conclure que c'est un faux positif. Cependant, l'ajout de "RegisterUnexpectedMemoryLeak (self)" au constructeur fait disparaître le message.

Est-ce que quelqu'un a déjà vu quelque chose comme ça? Une idée de ce qui pourrait en être la cause? Je suis à peu près aussi certain que je peux être que les objets sont pas fuite, alors qu'est-ce qui se passe à la place?

Répondre

7

Utilisez FastMM nouveau, activer la construction de fichier de carte dans les options du lieur, définir le symbole conditionnel FullDebugMode et reconstruire le programme. Ensuite, passez par vos pas. À la fin du programme, il doit générer le fichier nom_programme__MemoryManager__EventLog.txt avec des informations sur l'emplacement du programme dans lequel l'objet a été construit dans le programme.

0

Créez une fuite de mémoire dont vous êtes sûr qu'elle a la même fonction, puis observez les rapports du gestionnaire de mémoire.

Questions connexes