4

我在 c/c++ dll 中分配内存有问题,并用 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;

我看任务管理器,每次点击都会泄露8KB内存。

  1. 我怎样才能释放ptr?FreeMem 这个指针会使应用程序崩溃

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

4

1 回答 1

7

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

于 2013-08-15T02:20:30.577 回答