代码之家  ›  专栏  ›  技术社区  ›  jpfollenius Rob Kennedy

包内存管理

  •  0
  • jpfollenius Rob Kennedy  · 技术社区  · 15 年前

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

    在我的应用程序中,我执行如下操作:

    HandleList := TList <THandle>.Create;
    try
      PackageObj.DoSomething (HandleList);
    finally
      FreeAndNil (HandleList);
    end;
    

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

    procedure TPackageObject.DoSomething (HandleList: TList <THandle>);
    begin
      HandleList.Clear;
      HandleList.Add (0);
    end;
    

    我确实明白 Invalid Pointer 调用时出现异常 Clear 在包中或在调用中 FreeAndNil 在应用程序中。有时也会发生访问冲突。

    使用fastmm时,有时会报告“块头已损坏”。

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

    就是这样 HandleList 对象被传递到包并返回,好吗?对于包和内存管理有什么重要的了解吗?或者错误一定是在其他地方?

    编辑 如果错误可能出现在其他地方,我应该如何调试类似的东西?有什么经验吗?

    1 回复  |  直到 15 年前
        1
  •  3
  •   Ondrej Kelle    15 年前

    LoadPackage requires