首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包内存管理

包内存管理
EN

Stack Overflow用户
提问于 2010-02-22 08:46:58
回答 1查看 279关注 0票数 0

由于我在尝试使用DLL时遇到了很多困难,所以我决定尝试运行时包(主要是为了避免内存管理器和类型注册表问题)。

在我的申请中,我做了这样的事情:

代码语言:javascript
复制
HandleList := TList <THandle>.Create;
try
  PackageObj.DoSomething (HandleList);
finally
  FreeAndNil (HandleList);
end;

方法(在运行时包中)只是向列表中添加了一些内容:

代码语言:javascript
复制
procedure TPackageObject.DoSomething (HandleList: TList <THandle>);
begin
  HandleList.Clear;
  HandleList.Add (0);
end;

无论是在包中对Clear的调用中还是在应用程序中对FreeAndNil的调用中,我都得到了FreeAndNil异常。访问冲突也时有发生。

当使用FastMM时,它有时会报告“块标头已损坏”。

当内存被分配或释放时,错误总是发生,即向列表中添加某些内容,从而导致列表动态增长。

HandleList对象传递给包并返回的方式好吗?关于包和内存管理有什么需要了解的重要信息吗?或者错误一定是在别的地方?

在错误可能发生在其他地方的情况下,编辑,我该如何调试这样的东西呢?有经验吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-22 11:35:29

我猜您正在不同的包中编译相同的代码,也许在应用程序可执行文件中也是如此。无论是静态链接运行时包(在项目选项中列出它们)还是动态链接(使用LoadPackage),每个单元都必须链接到一个模块中,否则会出现重复的代码冲突。检查您的包依赖项(requires子句)、主项目选项中的运行时包列表、查看编译器关于隐式包含单元的警告。

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

https://stackoverflow.com/questions/2309730

复制
相关文章

相似问题

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