2009-09-17 9 views
1
FUNCTION SystemspartsClT.KeyFound(Key : AluCostDict.SystemspartskeyT) : BOOLEAN; 
VAR v : Variant; 
BEGIN 
    v  := VarArrayCreate([0,1], VarInteger); 
    v[0] := Key.System; 
    v[1] := Key.PartType; 
    Sucess := t.Locate('System;PartType', v, []); 
    v  := NULL; 
    Result := Sucess; 
END; 

J'utilise Delphi pour Win32.gratuitement la variante VarArray

Cette fonction crée-t-elle une fuite de mémoire ou non?

Dois-je libérer le variant v comme vararray et comment?

Dois-je libérer ou initialiser le variant local v?

Répondre

7

Ce n'est pas une fuite, mais c'est beaucoup trop de code pour une tâche assez simple. Essayez:

FUNCTION SystemspartsClT.KeyFound(
    Key : AluCostDict.SystemspartskeyT) : BOOLEAN; 
BEGIN 
    Result := t.Locate('System;PartType', 
       VarArrayOf([Key.System, Key.PartType]), []); 
END; 
6

Non, non et non. Les variantes et les tableaux de variantes sont gérés par le compilateur. Ils sont initialisés lorsque vous les créez et libérés lorsqu'ils sont hors de portée. La seule façon dont ils pourraient créer une fuite de mémoire est si vous avez assigné un objet à la valeur du variant puis oublié de le libérer.

Questions connexes