我有很多内存分配和同样数量的FreeMem调用。但我没有在调用freemem之前检查指针是否为空,也没有在释放后设置指针为空。
我试图创建一个函数来做这个。
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;
但是有个问题。它无法将原始指针设置为 nil,因为参数不是变量(var p: Pointer)。虽然我不能使用 var,但我也不能这样做,因为编译器会抱怨类型必须是完全相同的类型(Pointer)。我传递的指针可能是任何类型的指针(PChar,常规指针等)。
我该怎么办才能解决这个问题?有更好的解决方案吗?
FreeAndNil
的函数。http://www.delphibasics.co.uk/RTL.asp?Name=FreeAndNil - Andrey