我使用动态数组很多,并且SetLength和Finalize程序没有问题。
我最近有理由使用动态数组,其中每个数组元素本身可以包含可变数量的元素。声明是这样的:
TScheduleArray = array of array of array [1..DaysPerWeek] of TShiftType;
该软件工作正常,我没有遇到如何使用此结构的问题。在主阵列上调用 SetLength ,然后可以在每个数组元素上再次调用 SetLength 。这是按预期工作的。
SetLength(MyArray, 1);
SetLength(MyArray[0], 2);
我的问题是:当我来释放用于此数组的资源时,我是否只是在数组变量上调用 Finalize :
Finalize(MyArray);
或每个数组元素是否也需要 Finalize d,因为每个元素本身都是一个动态数组?
答案 0 :(得分:6)
引用: “您在主阵列上调用SetLength 然后可以在上再次调用SetLength 每个数组元素。“
您实际上不必遍历数组。
SetLength()
接受每个维度的长度列表。
示例:强>
SetLength(ScheduleArray,200,15,35);
与:
相同SetLength(ScheduleArray,200);
for i:=low(ScheduleArray) to high(ScheduleArry) do
begin
SetLength(ScheduleArray[i],15);
for j:=low(ScheduleArray[i]) to high(ScheduleArray[i]) do
SetLength(ScheduleArray[i,j],35);
end;
答案 1 :(得分:5)
数组由编译器管理,无需最终确定。如果TShiftType是一个类,则必须手动释放对象,一次一个,但是当数组超出范围时,数组本身将被正确处理。
答案 2 :(得分:1)
要释放任何动态数组,只需将其指定为nil即可 例如:
a:array of array of integer;
要释放它:
a:=nil;