什么需要在多维动态数组中完成?

时间:2009-09-16 13:14:02

标签: delphi arrays

我使用动态数组很多,并且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,因为每个元素本身都是一个动态数组?

3 个答案:

答案 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;