我在 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;
}
然后在delphi中:
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 中提供另一个函数来释放指针。
关于delphi - 如何释放delphi应用程序中c++ dll中分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18245319/