Bonjour, j'ai crée une class dérivé de tlist sa fonctionne mais a la sortie delphi me dis (j'utilise ReportMemoryLeaksOnShutDown := true:

Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:

13 - 20 bytes: Unknown x 1
Si je clique 2 fois sa passe à x2 etc.
Dans memproof sa n'apparait pas et en pas à pas je vois que ma liste et mon item est libéré j'arrive pas à comprendre. merci d'avance pour votre aide

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
Unit GameServerDetails;
 
Interface
 
Uses
  Windows, Messages, SysUtils, Variants, Classes;
 
Type
  TGameServerRulesDetails = Class
  Private
    FName, FValue: String;
  Public
    Constructor Create(Name, Value: String);
    Property Name: String Read FName;
    Property Value: String Read FValue;
  End;
 
  TGameServerRulesList = Class(TList)
  Private
    Function GetItem(Idx: Integer): TGameServerRulesDetails;
  Public
    Destructor Destroy; Override;
    Function Add(RulesDetails: TGameServerRulesDetails): Integer;
    Function AddRulesDetails(Name, Value: String): Integer;
    Function IndexOf(RulesDetails: TGameServerRulesDetails): Integer;
    Procedure Clear; Override;
    Procedure Insert(Index: Integer; RulesDetails: TGameServerRulesDetails);
    Procedure Delete(Index: Integer);
    Property Items[Idx: Integer]: TGameServerRulesDetails Read GetItem;
  End;
 
  End;
 
Implementation
 
{ TGameServerRulesDetails }
 
Constructor TGameServerRulesDetails.Create(Name, Value: String);
Begin
  FName  := Name;
  FValue := Value;
End;
 
{ TGameServerRulesList }
 
Function TGameServerRulesList.Add(
  RulesDetails: TGameServerRulesDetails): Integer;
Begin
  Result := Inherited Add(RulesDetails);
End;
 
Function TGameServerRulesList.AddRulesDetails(Name, Value: String): Integer;
Var
  RulesDetails: TGameServerRulesDetails;
Begin
  RulesDetails := TGameServerRulesDetails.Create(Name, Value);
  Result       := Add(RulesDetails);
End;
 
Procedure TGameServerRulesList.Clear;
Begin
  While Inherited Count > 0 Do
    Delete(0);
End;
 
Procedure TGameServerRulesList.Delete(Index: Integer);
Begin
  If Index In [0..Count - 1] Then
  Begin
    Items[Index].Free;
    Inherited Delete(Index);
  End;
End;
 
Destructor TGameServerRulesList.Destroy;
Begin
  Try
    Clear;
  Finally
    Inherited Destroy;
  End;
End;
 
Function TGameServerRulesList.GetItem(Idx: Integer): TGameServerRulesDetails;
Begin
  Result := TGameServerRulesDetails(Inherited Items[Idx]);
End;
 
Function TGameServerRulesList.IndexOf(
  RulesDetails: TGameServerRulesDetails): Integer;
Begin
  Result := 0;
  While (Result < Count) And (
      (Items[Result].FName <> RulesDetails.Name) And
      (Items[Result].FValue <> RulesDetails.Value)
    ) Do
    Inc(Result);
  If Result = Count Then
    Result := -1;
End;
 
Procedure TGameServerRulesList.Insert(Index: Integer;
  RulesDetails: TGameServerRulesDetails);
Begin
  Inherited Insert(Index, RulesDetails);
End;
 
End.
appel exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Procedure TForm1.Button1Click(Sender: TObject);
Var
  t: TGameServerRulesList;
Begin
  t := TGameServerRulesList.Create;
  t.AddRulesDetails('t', '0');
  t.Free;
End;