valeur de fonction de retour - Delphi/Pascal - Programmation
Marsh Posté le 07-02-2003 à 08:44:11
ben là c normal que cela ne fonctionne pas, si tu détruit ta liste avant de la retourner... 
 
alors au choix tu peux faire 
 
procedure FaireJouJouAvecMaListe(MaListe:TStringList); 
begin 
 if MaListe=nil then exit; // on sait jamais  
 
 MaListe.add('bonjour' ;
; 
end; 
 
ou alors si tu veux une fonction 
 
function FaireJouJouAvecMaListe:TStringList; 
begin 
 result := TStringList.create; 
 result.add('bonjour' ;
; 
end; 
 
avec cette solution il ne faudra pas oublier de libérer ta liste ...
Marsh Posté le 07-02-2003 à 09:48:26
result.Assign(MyList); 
 
C un super moyen pour faire des memory leak, le mieux est de passer ta liste par référence comme paramètre de ta fonction
Marsh Posté le 18-02-2003 à 17:35:23
je susi d'accord avec Poire : "le mieux est de passer ta liste par référence " 
 
cependant, rajoutes le mot clé var, pour indiquer que la liste va être modifiée dans ta fonction. C'est pas indispensable mais c'est bp plus propre et lisible  (une objection ?)
 (une objection ?) 
 
 
 
procedure FaireJouJouAvecMaListe(var MaListe:TStringList);  
begin  
if MaListe=nil then exit; // on sait jamais  
  
MaListe.add('bonjour' ;
;  
end;  
Marsh Posté le 18-02-2003 à 17:38:51
non c'est vrai c'est plus propre  
 
de la même manière, mettre const pour les trucs qui ne seront pas modifiés, surtout pour les string et les record, où ça améliore les perfs (passage de l'adresse au lieu de tout recopier) 
Marsh Posté le 07-02-2003 à 05:27:15
dans une fonction en delphi,
 
 
je veux retourner une liste...
genre on peut pas envoyer ce qu'on veut et ensuite détruite l'objet?
sinon je vais être obliger de mettre la liste global
function():TStringList;
var
MyList: TStringList;
begin
MyList := TStringList.Create;
...
...
result:=MyList;
MyList.Free;
end;