我收到运行时217错误,我已经跟踪到我的某个单位的终结部分。这是代码:
finalization
begin
for I:= 0 to CacheList.Count - 1 do
begin
tempRecord := CacheList.Items[I];
for k := 0 to length(tempRecord.details) - 1 do
begin
tempRecord.Details[k].free;
end;
tempRecord.free;
end;
CacheList.Free;
end;
和tempRecord是:
Record = class
Details : array of CachedDetails;
key : string;
end;
CachedDetails = class
EDate : TDateTime;
A : Real;
B : Real;
C : Real;
end;
即使我收到错误,该过程也会完全成功。如果我只是注释掉整个定稿,那么错误就会消失,但我显然不想泄漏内存。我不正当地称自由了吗?
答案 0 :(得分:1)
对于列表中的免费项目,它不是一个好建议,而它们属于列表。 你必须检查它是否是一种TObjectList,如果这个List拥有对象。
或者您从列表中提取项目并将其释放。
finalization
begin
while CacheList.Count > 0 do
begin
tempRecord := CacheList.Extract( CacheList.First );
for k := 0 to length(tempRecord.details) - 1 do
begin
tempRecord.Details[k].free;
end;
tempRecord.free;
end;
CacheList.Free;
end;
但正如考虑一下,如果你将破坏责任移交给Record类和CacheList一个带有OwnsObjects = True的TObjectList那么你的finlization代码将会是这样的
finalization
CacheList.Free;