Comprend plus rien moi
Bon, ça c'est bon :
ça, ça me gène, tu ne détruis pas le tmp.Elem (TMenuButton) qui reste en mémoire (d'où ta fuite):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TFiledeboutons.afficher(F:PFileElem); begin if F^.Suivant <> nil then begin FLTete(F).Display(FLTete(F).x, FLTete(F).y); afficher(F^.Suivant); end end;
d'où plutôt :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure FLDestroy(F: PFileElem); var tmp, tmp2 : PFileElem; begin tmp:= F; while tmp<>nil do begin tmp2:= tmp^.suivant; dispose(tmp); tmp:= tmp2; end;
Là, il n'y a plus de fuite..
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 procedure FLDestroy(F: PFileElem); var tmp, tmp2 : PFileElem; begin tmp:= F; while tmp<>nil do begin tmp2:= tmp^.suivant; tmp.elem.free; dispose(tmp); tmp:= tmp2; end;
A moins que afficher modifie F^.Suivant, je ne vois pas comment F^.Suivant peut changer.Envoyé par waskol
Salut MD Software !
haaaaaaaa..... la récursivité...
essaies de voir son code comme ça (code non récursif, donc certainement meilleur pour la pile mémoire (le stack) ) :
Quand il fait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TFiledeboutons.afficher(F:PFileElem); begin while F^.Suivant <> nil do begin FLTete(F).Display(FLTete(F).x, FLTete(F).y); F:=F^.Suivant; end end;
Afficher(F^.suivant); dans son code, on rerentre dans la procedure afficher avec F:=F^.suivant, donc F(i)=F(i+1)
Houlàlà, je viens de piger.
J'ai pas de problème avec la récursivité, j'avais juste pas remarqué que la méthode s'appellait afficher. C'est pour ça que j'arrêtais pas de demander à voir le code de afficher.
Faut que j'apprenne à lire !
Bon, j'ai rien dit, pas de sourcis sur afficher
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager