繁体   English   中英

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

[英]How to release memory allocate in c++ dll in delphi application

我在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内存。

  1. 我该如何发布ptr? FreeMem这个指针会使应用程序崩溃

  2. 我在C / C ++ dll中分配1024 * 1024 * 2字节,为什么它显示泄漏8KB?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM