Ricardo César Cardoso wrote:
> Não sei se o Yahoo trocou as mensagens, mas ambos funcionam. O fato é que eu 
> crio o StringList "final" fora das functions. Seria algo assim:
> 
> Var
>   SLFinal : TStringList;
> 
> Begin
>    SLFinal := TStringList.Create;
>    { bloco de comandos }
> 
>    SLFinal := Selecionar_Velocidade_Corte(Especificacao, Dimensao);
> End;
> 
> e antes desse código e no meu caso em outra unit está declarada a function 
> que cito na 1ª mensagem.
> 
> Isso muda alguma coisa? Fiz uns testes aqui e funcionou... mas não fiz como 
> vc passou.

Neste caso você não está utilizando SLFinal. Esta variável está apenas 
recebendo um objeto, que por sinal foi destruído -- vide Temp.Free 
dentro da sua função.

Outro problema, você criou um string list, associou ao SLFinal e perdeu 
a referência a ele quando fez a atribuição com o resultado da função. Em 
alguns pontos do código você está tratando objetos como um número ou uma 
ansi string. Vou citar alguns exemplos, espero não ser inconveniente com 
isto.

VLista := TStringList.Create;
Result := VLista;
VLista.Free;

aqui Result, bem como VLista, apontam para um objeto recém destruído e 
isto vai gerar um AV assim que você tentar utilizá-lo. Quando você 
associa uma variável a outra, você não copia informação mas apenas o 
endereço daonde o objeto se encontra. Outro exemplo:

VLista := TStringList.Create;
Result := VLista;
writeln(Result.Count); // retorna 0
VLista.Add('1');
writeln(Result.Count); // retorna 1
VLista.Free;
writeln(Result.Count); // AV

Um último exemplo para não ficar muito xarope:

VLista := TStringList.Create;
VLista := ManipulaLista(Especificacao, Dimensao);

Você perdeu a referência ao StringList que você criou e terá um 
vazamento de memória independente da forma que ManipulaLista seja 
implementado. Por outro lado, ManipulaLista não recebe referência alguma 
da sua StringList, a variável Result daquela função tem valor inicial 
indefinido.

Se você quiser e puder detalhar melhor o que precisa ser feito, talvez 
saiam algumas idéias legais para a implementação.

--
Joao Morais

Responder a