System.GetMem和System.ReallocMem有什么区别?
在Delphi 2009中,ReallocMem的帮助文档与GetMem完全相同。那么System.FreeMem和System.Dispose呢?
在处理数组时应该使用哪种方法?
type
PMemberDataList = ^TMemberDataList;
TMemberDataList = array[0..MaxClassMembers -1] of PMemberData;
var
FItems: PMemberDataList;
begin
GetMem(FItems, Value * SizeOf(Pointer));
FreeMem(FItems);
end;
或者
begin
ReallocMem(FItems, Value * SizeOf(Pointer));
Dispose(FItems);
end;
解决方案
在听取了其他人的建议后,我将FItems声明为记录类型而不是指向记录的指针,将TMemberDataList声明为动态数组,使用SetLength来(de)分配数组,使用New/Dispose来处理数据。
type
PMemberDataList = ^TMemberDataList;
TMemberDataList = array of PMemberData;
var
Items: TMemberDataList;
Item: PMemberData;
// Add
begin
Setlength(Items, 1);
New(Item);
Items[0]:= Item
end;
// Remove
begin
Dispose(Items[0]);
Setlength(Items, 0);
end;