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

时间:2013-08-15 02:15:42

标签: delphi memory-leaks delphi-2010

我在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?

1 个答案:

答案 0 :(得分:7)

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