我定义了PClassData指向结构体TClassData。
type
PClassData = ^TClassData;
TClassData = packed record
ID: integer;
end;然后我在程序中静态定义能正常运行:
var
aa: array [0..10] of PClassData;
begin
aa[1].ID := 1;
end;但是改为动态定义,一运行就出错了:
var
aa: array of PClassData;
begin
setlength(aa, 10);
aa[1].ID := 1;
end;
请问得怎么办才能动态分配aa的长度呢?
type
PClassData = ^TClassData;
TClassData = packed record
ID: integer;
end;然后我在程序中静态定义能正常运行:
var
aa: array [0..10] of PClassData;
begin
aa[1].ID := 1;
end;但是改为动态定义,一运行就出错了:
var
aa: array of PClassData;
begin
setlength(aa, 10);
aa[1].ID := 1;
end;
请问得怎么办才能动态分配aa的长度呢?
静态的:
for i := 0 to 9 do
begin
new(aa[i]); //= new(TClassData)
end;
动态更是如此:
先申请可以装载10个元素的空间
PClassData = ^TClassData;
TClassData = packed record
ID: integer;
end;procedure TForm1.Button1Click(Sender: TObject);
var
// 静态数组
ClassData: array[0..1] of PClassData;
I: Integer;
begin
for I := 0 to 1 do
begin
// 分配内存空间
GetMem(ClassData[I], Sizeof(TClassData)); // 使用...
ClassData[I].ID := I + 100;
ShowMessage(IntToStr(ClassData[I].ID)); // 释放内存空间
FreeMem(ClassData[I]);
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
// 动态数组
ClassData: array of PClassData;
I: Integer;
begin
// 分配
SetLength(ClassData, 2);
for I := 0 to 1 do
begin
// 分配内存空间
GetMem(ClassData[I], Sizeof(TClassData)); // 使用...
ClassData[I].ID := I + 100;
ShowMessage(IntToStr(ClassData[I].ID)); // 释放内存空间
FreeMem(ClassData[I]);
end;
// 释放
ClassData := nil;
end;