Bonjour tout le monde,

Je débute à l'utilisation de FastMM4 pour détecter les erreurs de mémoire dans mes applications. mon problème est qu'avec cette méthode, un simple programme de type "Hello World" comme celui-ci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
     ShowMessage('Hello World');
end;
 
end.
Je pense qu'on ne peut pas faire plus simple comme programme

A la fermeture de ce petit programme, j'ai un message d'avertissement de FastMM4 qui me dit qu'il y a des fuites de mémoires :

This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):

13 - 20 bytes: TObjectList x 3, Unknown x 3
21 - 36 bytes: TWinHelpViewer x 1
37 - 52 bytes: THelpManager x 1

Note: Memory leak detail is logged to a text file in the same folder as this application. To disable this memory leak check, undefine "EnableMemoryLeakReporting".
Si je regarde de plus près le fichier Log généré par FastMM4, il apparaît que le problème vient du fichier HelpIntfs.pas qui est chargé par défaut au lancement de l'application (Sans que je n'aie dû rajouté qqch dans mon prog).

L'une des entrées du fichier Log est par exemple :
A memory block has been leaked. The size is: 20

This block was allocated by thread 0xC10, and the stack trace (return addresses) at the time was:
4029AF [system.pas][System][@GetMem][2450]
4037EB [system.pas][System][TObject.NewInstance][8288]
403BB2 [system.pas][System][@ClassCreate][8948]
43501E [Contnrs.pas][Contnrs][TObjectList.Create]
4037F4 [system.pas][System][TObject.NewInstance][8288]
406395 [system.pas][System][TInterfacedObject.NewInstance][17345]
403BB2 [system.pas][System][@ClassCreate][8948]
43619A [HelpIntfs.pas][HelpIntfs][THelpManager.Create][295]
4360A1 [HelpIntfs.pas][HelpIntfs][GetHelpSystem][274]
404685 [system.pas][System][@NewAnsiString][11530]
469F52 [Forms.pas][Forms][TApplication.ValidateHelpSystem][7109]

The block is currently used for an object of class: TObjectList

The allocation number is: 193

Current memory dump of 256 bytes starting at pointer address 7FF96800:
28 4F 43 00 40 5F F9 7F 00 00 00 00 04 00 00 00 01 00 00 00 69 91 14 7A 00 00 00 00 40 32 F9 7F
00 00 00 00 00 00 00 00 60 9B 40 00 00 00 00 00 C2 00 00 00 AF 29 40 00 EB 37 40 00 B2 3B 40 00
1E 50 43 00 AC 61 43 00 A1 60 43 00 85 46 40 00 52 9F 46 00 EE 7B 46 00 0A 3C 40 00 D0 65 46 00
10 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 00 00 00 00 00 00 00 BC C3 18 83
28 4F 43 00 60 6C F9 7F 00 00 00 00 04 00 00 00 01 00 00 00 43 3C E7 7C 00 00 00 00 40 32 F9 7F
00 00 00 00 00 00 00 00 60 9B 40 00 00 00 00 00 C3 00 00 00 AF 29 40 00 EB 37 40 00 B2 3B 40 00
1E 50 43 00 BE 61 43 00 A1 60 43 00 85 46 40 00 52 9F 46 00 EE 7B 46 00 0A 3C 40 00 D0 65 46 00
( O C . @ _ ù  . . . . . . . . . . . . i ‘ . z . . . . @ 2 ù 
. . . . . . . . ` › @ . . . . . Â . . . ¯ ) @ . ë 7 @ . ² ; @ .
. P C . ¬ a C . ¡ ` C . … F @ . R Ÿ F . î { F . . < @ . Ð e F .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . ¼ Ã . ƒ
( O C . ` l ù  . . . . . . . . . . . . C < ç | . . . . @ 2 ù 
. . . . . . . . ` › @ . . . . . Ã . . . ¯ ) @ . ë 7 @ . ² ; @ .
. P C . ¾ a C . ¡ ` C . … F @ . R Ÿ F . î { F . . < @ . Ð e F .
Et toutes les autres font également référence à HelpIntfs.pas
Est-il possible de résoudre ce problème de mémoire? Si oui, comment?

Merci d'avance

PS. Bien sûr, je pourrait désactiver l'affichage des messages FastMM4 mais ça n'est pas le but de l'opération