首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我调用这个finalization部分时,为什么我得到一个217错误?

当我调用这个finalization部分时,为什么我得到一个217错误?
EN

Stack Overflow用户
提问于 2012-11-18 14:12:04
回答 1查看 245关注 0票数 1

我得到了一个运行时217错误,我已经追踪到我的一个单元的finalization部分。代码如下:

代码语言:javascript
复制
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是:

代码语言:javascript
复制
Record = class
 Details : array of CachedDetails;
 key : string;
end;

CachedDetails = class
 EDate : TDateTime;
 A     : Real;
 B     : Real;
 C     : Real;
end;

即使我得到了这个错误,这个过程还是完全成功了。如果我简单地注释掉整个finalization,错误就会消失,但我显然不想泄漏内存。我给frees打错电话了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-18 19:10:14

这不是一个好的建议,自由项目的列表,而他们属于列表。您必须检查它是否是一种TObjectList,以及这个列表是否拥有这些对象。

或者从列表中提取项目并释放它。

代码语言:javascript
复制
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,那么您的终结化代码将如下所示

代码语言:javascript
复制
finalization

CacheList.Free;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13437933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档