【问题标题】:Delphi dynamic arrayDelphi动态数组
【发布时间】:2016-12-12 11:51:17
【问题描述】:

我正在使用 Delphi 10.0 Seattle。

假设我有这样的记录:

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

还有一个像这样的变量:

v : array of TmyRecord;

还有一些像这样的代码:

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

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

【问题讨论】:

    标签: arrays delphi dynamic delphi-10-seattle


    【解决方案1】:

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

    如果您需要尽快释放数组内存,您可以显式清除数组v,这将自动释放所有内存,包括您的记录成员ar 占用的内存。

    您无需执行任何其他操作。


    Delphi中清除动态数组有几种方法:

    将数组长度设置为 0 是清除数组的一种方法。

    SetLength(v,0);
    

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

    v := nil;
    

    或者通过使用内在的Finalize:

    Finalize(v);
    

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

    【讨论】:

    • 通常(例如,如果 v 是一个局部变量)我会什么都不做(只是让它超出范围)来清除它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多