我有很多内存分配和相同数量的 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;
但是有一个问题。它不能将原始指针设置为 nil,因为参数不是变量(var p:指针)。但我不能使用 var 因为如果我这样做编译器会抱怨类型必须是完全相同的类型(指针)。我传递的指针可以是指向任何类型(PChar、常规指针等)的指针。
我能做些什么来解决这个问题?有更好的解决方案吗?