Delphi动态数组

Jim*_*pas 1 arrays delphi dynamic delphi-10-seattle

我正在使用Delphi 10.0 Seattle.

假设我有这样的记录:

TmyRecord = record
  a,b : string;
  ar  : array of string
end;
Run Code Online (Sandbox Code Playgroud)

和这样的变量:

v : array of TmyRecord;
Run Code Online (Sandbox Code Playgroud)

和一些像这样的代码:

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';
Run Code Online (Sandbox Code Playgroud)

请问这句话:

SetLength(v,0);
Run Code Online (Sandbox Code Playgroud)

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

Dal*_*kar 5

动态数组内存由Delphi自动管理,并在超出范围时发布.

清除v数组将自动释放所有内存,包括ar记录成员占用的内存.

你不必做任何其他事情.

您也可以v通过将其设置为清除数组nil

v := nil;
Run Code Online (Sandbox Code Playgroud)

或者使用内在的Finalize:

Finalize(v);
Run Code Online (Sandbox Code Playgroud)

所有这些都具有相同的含义.