Bonjour,
Je vous explique mon problème: J'ai besoin d'une liste de record contenant elle-même une liste de record (je sais, j'aurais du faire une collection ).
En revanche, quand j'appelle Detruit_Liste, ça ne libère pas totalement la mémoire allouée!
Si qqun aperçoit un bug, merci bcp, moi je suis dessus depuis hier!!

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
 
type Tgenerale = record
   nom: String;
   attribut: String;
   liste: TList;
end;
Pgenerale=^Tgenerale;
 
type Tsecondaire = record
   numero: Integer;
   nom: String;
end;
Psecondaire=^Tsecondaire;
 
var lstGenerale = TList;
 
 
procdure Remplit_Liste;
var i: Integer;
     MonPgenerale: Pgenerale;
     MonPSecondaire: Psecondaire;
begin
   New(MonPgenerale);
   Pgenerale(MonPgenerale)^.Nom:= 'Liste Generale';
   Pgenerale(MonPgenerale)^.liste:= TList.create;
   for i:=0 to 1000 do
   begin
      New(MonPsecondaire);
      PSecondaire(MonPSecondaire)^.numero:= i;
      PSecondaire(MonPSecondaire)^.nom:= 'toto';
      Pgenerale(MonPgenerale)^.liste.Add(MonPsecondaire);
   end;
   lstGenerale.Add(MonPgenerale);
end;
 
procdure Detruit_Liste;
begin
   while lstGenerale.Count<>0 do begin
      while Pgenerale(MonPgenerale)^.liste.Count<>0 do begin
         Dispose(Pgenerale(MonPgenerale)^.liste[0]);
         Pgenerale(MonPgenerale)^.liste.Delete[0];
      end;
     Pgenerale(MonPgenerale)^.liste.Free;
 
      Dispose(lstGenerale[0]);
      lstGenerale.Delete[0];
   end;
 
   lstGenerale.Free;
end;