voilà, j'ai une fonction récursive qui ressemble à ça:
Juste avant un exit (y'en a plusieurs dans la fonction), je fais appel à setlength(letab,0,0) pour récupérer la mémoire de mon tableau.
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 function TForm1.Reflexion(tab:tab2DInt;profondeur,lejoueur,A,B,Prof:Integer;Passe,TypeReflexion:boolean;TempsSomme,TempsDifference:Single):Integer; var alpha,beta:integer; k,l,coup:integer; i,j:integer; res:integer; letab:tab2DInt; Listcoup:TList; ListVal:TList; LeTempsDif:single; LeTempsSom:single; LeTempsSomAncien:single; begin if (SortieReflexion) and ((meilleurcoup>=0) or (profondeur<>0)) then begin result:=-infinity+1; setlength(letab,0,0); exit; end; Application.ProcessMessages; NbCoupEtudie:=NbCoupEtudie+1; ... setlength(letab,0,0); end;
Mais quand je lance mon programme (c'est un othello) et que je lance et que je fais jouer 2 ordis, la mémoire ne fais qu'augmenter et assez rapidement et le setlength(letab,0,0) n'a aucun effet.
Qu'est ce qui ne fonctionne pas? J'ai essayé Finalize(letab) mais ça n'a aucun effet. Les variables locales sont bien détruites à la fin de la fonction ?
Faut-il aussi vider les listes Listcoup et listval avant de quitter la fonction ?
Partager