Bonjour à tous.
J'ai ecris une function qui retourne un TStringList comme résultat, mais je n'arrive pas à liberer le StringList à la fin de la fonction sans que le programme plante
Voici cette fonction ...
function ListerProcessus:TStringList;
var
HandleCaptureProcessus:THandle;
StructureProcessus:TProcessEntry32;
Liste:TStringList;
begin
Liste:=TStringList.Create;
HandleCaptureProcessus:=CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS,0);
StructureProcessus.dwSize:=SizeOf(TProcessEntry32);
Process32First(HandleCaptureProcessus,StructureProcessus);
repeat
Liste.Add(StructureProcessus.szExeFile);
until not Process32Next(HandleCaptureProcessus,StructureProcessus);
CloseHandle(HandleCaptureProcessus);
Result:=Liste;
end;
Normalement toute StringList doit être libéré après usage, pourtant si je rajoute "Liste.Free" toute à la fin de la fonction, elle me retourne une liste vide, alors que théoriquement le résultat est déjà affecté (Result:=Liste).
Pourquoi ?
Autre chose bizarre, dans l'appel de cette fonction cette fois ...
Voila ce que j'ai ecris ...
procedure TForm2.FormShow(Sender: TObject);
var
Liste:TStringList;
IndexListe:integer;
begin
LstVw_ProcessusEnCours.Clear;
Liste:=ListerProcessus;
for IndexListe:=0 to (Liste.Count-1) do
LstVw_ProcessusEnCours.Items.Add.Caption:=Liste[IndexListe];
Liste.Free;
end;
Si je suis le code comme ça, je libere un TStringList que je n'ai jamais crée (pas de Liste.Create dans le code), pourtant ça marche très bien comme ça

Ca semble fonctionner correctement et je ça devrait me suffire mais ça me chiffonne quand même

Quelqu'un a t'il une explication ?
PS: et désolé pour la longueur du message
