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

标签 delphi memory-leaks delphi-2010

我在 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/

相关文章:

Delphi 2010 - IBX - UTF8 - dbmemo 问题

javascript - 模拟点击DIV

c# - 如何从 C# 调用此 delphi .dll 函数?

c++ - C++/MFC 应用程序内存不足错误

ios - addSubview 上的 Objective-C 内存泄漏

performance - Perfmon计数器检查内存泄漏

delphi - 执行带有参数的命令行可执行文件并等待错误代码(整数)?

delphi - 使用 Delphi 10.1 Berlin 使用 3DES 加密字符串

delphi - 如何动态滚动 TStringGrid?

delphi - Delphi 2010 Enterprise 版本的哪些功能对您有值(value),为什么?