2016-12-12 1 views
1

J'utilise Delphi 10.0 Seattle.Delphi tableau dynamique

Supposons que j'ai un dossier comme celui-ci:

TmyRecord = record 
    a,b : string; 
    ar : array of string 
end; 

Et une variable comme ceci:

v : array of TmyRecord; 

et un code comme ceci:

SetLength(v,2); 
SetLength(v[0].ar,3); 
SetLength(v[1].ar,2); 
SetLength(v[0].ar[0],10); 
SetLength(v[0].ar[1],5); 
SetLength(v[0].ar[2],7); 
... 
v[0].ar[0][0] := 'aaaa'; 
v[0].ar[0][1] := 'bbbb'; 
.... 
v[1].ar[1][0] := 'xxxx'; 

Est-ce que cette déclaration:

SetLength(v,0); 

gratuitement tous la mémoire occupée, ou dois-je libérer manuellement?

Répondre

4

mémoire de tableau dynamique est géré automatiquement par Delphi et est libéré quand ils sont hors de portée.

L'effacement v va automatiquement libérer toute la mémoire, y compris celles occupées par ar membre de votre enregistrement.

Vous ne devez pas faire quoi que ce soit d'autre.

Vous pouvez également effacer tableau v en mettant à nil

v := nil; 

ou en utilisant la valeur intrinsèque Finalize:

Finalize(v); 

Tous ces ont un sens identique.

+0

Normalement, (par exemple si 'V' est une variable locale) je l'effacer en ne faisant rien (tout simplement laisser tomber hors de portée). –