Invalid Pointer Operation ao usar FreeAndNil para liberar o objeto

Delphi

07/01/2015

Prezados,

Estou tendo problemas "Invalid Pointer Operation" ao liberar uma classe que criei, segue abaixo um exemplo do código:

function TFrmArAnvHoras.getLogAnterior: TLogAnv;
var
Log: TLogAnv;
begin
try
 Log:= TLogAnv.Create;
 lcdsHorasInseridas.Prior;
 log    := getLog;
 Result := Log;
 finally
  FreeAndnil(Log);
 end;
end;


Agradeço desde já!
Dannicléo Teles

Dannicléo Teles

Curtidas 0

Respostas

Renato Rubinho

Renato Rubinho

07/01/2015

Buenos,

Você apontou o retorno da função para a variável log.
Acredito que o erro ocorre porque você está liberando da memória o pointer que apontou para o Result.
Nunca fiz uma função retornando uma classe assim, mas como provavelmente você irá receber o resultado da função em outra variável do tipo TLogAnv, não precisa criar uma nova variável na função e consequentemente não libera, pois será utilizada no retorno da função.
Quando você liberar da memória a variável que recebeu o retorno da função, terá o mesmo efeito.

Acredito que assim funcione:

function TFrmArAnvHoras.getLogAnterior: TLogAnv;
begin
 Result:= TLogAnv.Create;
 lcdsHorasInseridas.Prior;
 Result    := getLog;
end;


Abraççç,
rrubinho
GOSTEI 0
Dannicléo Teles

Dannicléo Teles

07/01/2015

Obrigado pela resposta rrubinho, acabei substituindo minha classe por um TRecord, que eliminou a necessidade de criar a classe. Mas o que vc falou faz sentido, vou testar, obrigado mais uma vez!
GOSTEI 0
POSTAR