AnsiString から TBytes (文字列の配列) へのハード型キャストを ToBytes メソッド (以下を参照) に置き換えた後、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 型の引数を取るように変更すると、メモリ リークはなくなります。