加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在delphi应用程序中释放c dll中的内存分配

发布时间:2020-12-15 09:20:49 所属栏目:大数据 来源:网络整理
导读:我在c / c dll中使用mem分配问题并用delphi调用它, ……这样: 用c / c创建一个dll #include "MemTestDll.h"extern "C" EXPORTAPI char* __cdecl Test(){ char* str=new char[1024*1024*2]; return str;} 然后在德尔福: function Test():PAnsiChar; cdecl;
我在c / c dll中使用mem分配问题并用delphi调用它,
……这样:

用c / c创建一个dll

#include "MemTestDll.h"

extern "C" EXPORTAPI char* __cdecl Test()
{
    char* str=new char[1024*1024*2];
    return str;
}

然后在德尔福:

function Test():PAnsiChar;  cdecl; external 'MemTestDll.dll';

procedure TForm3.btn3Click(Sender: TObject);
var
  ptr:PAnsiChar;
begin
   ptr:=Test();
  //FreeMem(ptr); // crash
  //SysFreeMem(ptr) //crash too
end;

我看到任务管理器,每次点击都会泄漏8 KB内存.

>我如何发布ptr? FreeMem这个指针会使应用程序崩溃
>我在C/C++ dll中分配1024 * 1024 * 2字节,为什么它显示泄漏8KB?

解决方法

跨越DLL边界使用动态内存的规则是,分配内存的人也必须释放它.您不能在DLL中分配内存,然后在DLL外部释放它.所以你应该在你的DLL中提供另一个释放指针的函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读