Bonjour à tous,
Après avoir trouvé dans les forums des sujets similaires, je n'en ai pas trouvé qui m'aident à comprendre ce problème.
Voici tout d'abord le code qui m'embète pas mal ...
Ma question est : Pourquoi lorsque j'utilise le debuggeur de Delphi 7, il m'indique que AZone, AMateriel et AParcours sont encore accessibles alors que je viens de faire le Dispose.
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 // Déclarations ... liste_resultat : TList; PMateriel = ^TMateriel; // Structure d'un matériel pour les calculs TMateriel = record Id : integer; Nom : string[50]; Electrification : shortint; Vitesse_max : word; Resultat : single; Resultat_300m : single; zone_annonce : smallint; liste_zone : TList; end; PZone = ^TZone; // Structure d'une zone élémentaire TZone = record Numero : ShortInt; Liste_parcours : TList; end; PParcours = ^TParcours; // Structure d'un parcours TParcours = record Pk_depart : String[7]; Pk_arrive : String[7]; Vts_depart : Integer; Vts_arrive : Integer; Type_portion : shortint; Decli : Integer; Incli : Smallint; Distance : Integer; Temps : Extended; end; procedure TFraCalcul.Liberer_memoire(); var AMateriel : PMateriel; AZone : PZone; AParcours : PParcours; i,j,k : integer; begin for i:= 0 to liste_resultat.Count - 1 do begin AMateriel := liste_resultat.Items[i]; for j:= 0 to AMateriel.liste_zone.Count - 1 do begin AZone := AMateriel.liste_zone.Items[j]; for k:= 0 to AZone.Liste_parcours.Count - 1 do begin AParcours := AZone.Liste_parcours.Items[k]; Dispose(AParcours); end; FreeAndNil(Azone.Liste_parcours); Dispose(AZone); end; FreeAndNil(AMateriel.liste_zone); Dispose(AMateriel); end; FreeAndNil(liste_resultat); end;
J'ai l'impression qu'il ne libère pas les ressources mémoires.
Je n'ai pas non plus envie de mettre uncar cela ne me dira pas si la ressource a bien été libérée. Je saurais seulement que je n'y accède plus ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part AZone := NIL;
Le pire c'est que lorsque je fais 2 Dispose à la suite pour vérifier qu'il m'a bien libérer les ressources, j'ai bien une exception ! Néanmoins mes ressources mémoires allouées ne diminuent pas ...
Merci
Partager