我得到了一个运行时217错误,我已经追踪到我的一个单元的finalization部分。代码如下:
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;即使我得到了这个错误,这个过程还是完全成功了。如果我简单地注释掉整个finalization,错误就会消失,但我显然不想泄漏内存。我给frees打错电话了吗?
发布于 2012-11-18 19:10:14
这不是一个好的建议,自由项目的列表,而他们属于列表。您必须检查它是否是一种TObjectList,以及这个列表是否拥有这些对象。
或者从列表中提取项目并释放它。
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类,并使用OwnsObjects=True CacheList一个TObjectList,那么您的终结化代码将如下所示
finalization
CacheList.Free;https://stackoverflow.com/questions/13437933
复制相似问题