在用 ToBytes 方法(见下文)将 AnsiString 的硬类型转换替换为 TBytes(字符串数组)后,Delphi 报告没有内存泄漏 - 但是,Free Pascal 2.6.2 显示泄漏,以防 TBytes 值传递给具有类型的参数Pointer
。
以下代码泄漏内存:
program project1;
{$mode delphi}
uses
SysUtils;
function ToBytes(const AValue: AnsiString): TBytes;
begin
SetLength(Result, Length(AValue)); // <-- leak (ine 10)
if Length(AValue) > 0 then
Move(AValue[1], Result[0], Length(AValue));
end;
procedure Send(P: Pointer);
begin
end;
begin
Send(ToBytes('test'));
SetHeapTraceOutput('heaptrace.log');
end.
内存泄漏报告:
Call trace for block $001C5CC0 size 12 $00401586 TOBYTES, line 10
of project1.lpr $00401622 main, line 21 of project1.lpr
如果我将 Send 方法更改为采用 TBytes 类型的参数,内存泄漏就会消失。