我在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?
答案 0 :(得分:7)
跨DLL边界使用动态内存的规则是,分配内存的人也必须释放它。您不能在DLL中分配内存,然后在DLL外部释放它。所以你应该在DLL中提供另一个释放指针的函数。