多くのメモリ割り当てと同じ数の FreeMem 呼び出しがあります。私が持っていなかったのは、freemem を呼び出してポインターが nil かどうかを確認する前のチェックと、ポインターを nil に設定するために解放した後の行です。
これを行う関数を作成しようとしました
procedure FreeMemAndNil(p: Pointer; size: Integer = -1);
begin
if p <> nil then
begin
if size > -1 then
FreeMem(p, size)
else
FreeMem(p);
p := nil;
end;
end;
しかし、問題があります。パラメーターが可変 (var p: ポインター) ではないため、元のポインターを nil に設定することはできません。ただし、var を使用することはできません。これを行うと、型がまったく同じ型 (ポインター) である必要があるとコンパイラが文句を言うからです。渡すポインターは、任意の型 (PChar、通常のポインターなど) へのポインターである可能性があります。
これを修正するにはどうすればよいですか? より良い解決策はありますか?