gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:23:32 24 4
gpt4 key购买 nike

我在 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 内存。

  1. 如何释放 ptr? FreeMem 这个指针将使应用程序崩溃

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

最佳答案

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

关于delphi - 如何释放delphi应用程序中c++ dll中分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18245319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com