Invalid Pointer Operation ao usar FreeAndNil para liberar o objeto
Prezados,
Estou tendo problemas "Invalid Pointer Operation" ao liberar uma classe que criei, segue abaixo um exemplo do código:
Agradeço desde já!
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
Curtidas 0
Respostas
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:
Abraççç,
rrubinho
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
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