首页 > 解决方案 > FastMM:如何为所有 unicode 或 ansi 字符串注册预期内存泄漏?

问题描述

有三个函数可以在 fastmm 中注册预期的内存泄漏:

function FastMM_RegisterExpectedMemoryLeak(ALeakedPointer: Pointer): Boolean; overload;
function FastMM_RegisterExpectedMemoryLeak(ALeakedObjectClass: TClass; ACount: Integer = 1): Boolean; overload;
function FastMM_RegisterExpectedMemoryLeak(ALeakedBlockSize: NativeInt; ACount: Integer = 1): Boolean; overload;

但它们不适用于字符串类型。任何想法 ?

标签: delphifastmm

解决方案


您可以将这些泄漏注册为通用泄漏,使用 function FastMM_RegisterExpectedMemoryLeak(ALeakedBlockSize: NativeInt; ACount: Integer = 1): Boolean; overload;

这是一个例子:

program StringLeakDemo;

{$APPTYPE CONSOLE}

uses
  FastMM5,
  System.SysUtils;

const Leakee = 'string which leaks';
var Z: ^String;

begin
  FastMM_MessageBoxEvents := [Low(TFastMM_MemoryManagerEventType) .. High(TFastMM_MemoryManagerEventType)];
  FastMM_RegisterExpectedMemoryLeak(32 + Length(Leakee), 1);

  GetMem(Z, SizeOf(string));
  Z^ := Leakee;
  FreeMem(Z);
end.

推荐阅读