如何在delphi应用程序中释放c dll中的内存分配
发布时间:2020-12-15 09:20:49 所属栏目:大数据 来源:网络整理
导读:我在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;
我在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这个指针会使应用程序崩溃 解决方法
跨越DLL边界使用动态内存的规则是,分配内存的人也必须释放它.您不能在DLL中分配内存,然后在DLL外部释放它.所以你应该在你的DLL中提供另一个释放指针的函数.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |