Tengo muchas asignaciones de memoria y el mismo número de llamadas de FreeMem. Sin embargo, lo que no tenía es una comprobación antes de llamar a freemem para ver si el puntero era nulo, y una línea después de liberar para establecer el puntero a cero.Memoria libre y nula en Delphi usando una sola función
Me trataron de crear una función para hacer esto
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;
Pero hay un problema. No puede establecer el puntero original en nil porque el parámetro no es variable (var p: Pointer). No puedo usar var aunque porque si el compilador se queja, el tipo tiene que ser del mismo tipo (Puntero). Los punteros que estoy pasando podrían ser punteros a cualquier tipo (PChar, puntero regular, etc.).
¿Qué puedo hacer para solucionarlo? ¿Hay una mejor solución?
there' FreeAndNil' http://www.delphibasics.co.uk/RTL.asp?Name=FreeAndNil – Andrey
@Andrey FreeAndNil solo funciona con objetos. Estoy lidiando con la memoria que asigné manualmente a un puntero. Gracias por su aporte. – Daisetsu