2016-12-12 134 views
1

我使用德尔福10.0西雅图。德尔福动态数组

假设我有这样的记载:

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

而且像这样的变量:

​​

和一些像这样的代码:

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'; 

请问这种说法:

SetLength(v,0); 

释放所有占用的内存,还是我必须手动释放它?

回答

4

动态数组内存由Delphi自动管理,并在超出范围时被释放。

结算v数组将自动释放所有内存,包括记录中的ar成员占用的内存。

你不需要做任何事情。

您也可以清晰v阵列通过将其设定nil

v := nil; 

或使用固有Finalize

Finalize(v); 

这些所有具有相同的含义。

+0

通常情况下(例如,如果'v'是一个局部变量),我可以通过不做任何事情来清除它(简单地说就是让它超出范围)。 –