Elias Magalhães da Paixão Junior wrote:

> A declaração:
>  
>   private
>     logsCapturados:array of icmpScan_cl_log_usr;
>  
> A procedure:
>  
> procedure icmpScan_cl_log_adm.procuraLogs;
> var
>   busca: TSearchRec;
>   logList: TStrings;
>   Ret,i: Integer;
>   host: string;
> begin
>   Ret := FindFirst('append\*.ims', faAnyFile, busca);
>   logList:=TStringlist.Create;
>   i:=0;
>   try
>     while Ret = 0 do
>       begin
>         logList.Add(busca.Name);
>  
> host:=copy(logList.ValueFromIndex[i],pos('_',logList.ValueFromIndex[i])+
> 1,length(logList.ValueFromIndex[i])-3-(pos('_',logList.ValueFromIndex[i]
> )+1));
>         logsCapturados[i]:=icmpScan_cl_log_usr.create(host);   --> O
> erro acontece aqui. Como se a variável não tivesse sido declarada.
>         Ret := FindNext(busca);
>         i:=i+1;
>       end;
>   finally
>     begin
>       FindClose(busca);
>     end;
>   end;
> end;
>  
>  
> E voltando a dizer, que se eu declarar esse array como uma variável da
> procedure, ao invés da unit, funciona.

Você não está criando o array, você precisa desta linha:

SetLength(logCapturados, <quantosquiser>);

portanto você precisa primeiro descobrir quantos arquivos seu 
FindFirst/Next irá catar. Coloque outro laço depois de capturar todos os 
nomes de arquivo.

A declaração local não dá problema porque variáveis locais não são 
inicializadas e por pura sorte ela estaria apontando para uma área de 
memória alocada para a sua aplicação.


--
Joao Morais



> Elias Magalhães da Paixão Junior
> ___________________________________
> Análise de Sistemas e Banco de Dados
> Consultoria e desenvolvimento de programas, sistemas e websites
> Tel.: (0XX21) 8262-7955
> -----Mensagem original-----
> De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
> Em nome de Eduardo Castro Alves
> Enviada em: segunda-feira, 14 de maio de 2007 07:58
> Para: delphi-br@yahoogrupos.com.br
> Assunto: Re: [delphi-br] Violação de Memória em Array
>  
> Acho que vc deve estudar muito. Segue abaixo um exemplo de um vetor 
> dinâmico e um de tamanho fixo.
> 
> var
> i : Integer;
> A1 : Array of String;
> A2 : Array [0..10] of String;
> 
> begin
> 
> Memo1.Clear;
> SetLength(A1, 20); // defino o tamanho do vetor
> for i := 0 to Length(A1) - 1 do
> A1[i] := 'Vetor A1 Linha ' + IntToStr(i);
> 
> for i := 0 to 10 do
> Memo1.Lines.Add(A1[i]);
> 
> for i := 0 to 10 do
> A2[i] := 'Vetor A2 Linha ' + IntToStr(i);
> 
> for i := 0 to 10 do
> Memo1.Lines.Add(A2[i]);
> 
> end;
> 
> Eduardo
> 
> Elias Magalhães da Paixão Junior escreveu:
>> Amigos,
>>
>> Preciso perturbá-los mais uma vez, pois não consigo encontrar solução.
>> Em uma unit, tenho o seguinte array declarado:
>>
>> Private
>> logsCapturados: array of log --> Já tentei estático tb.
>>
>>
>> Logo depois, em uma procedure, ele é criado:
>>
>> logsCapturados:=log.create;
>>
>> Aqui ocorre o erro de violação de memória, aquele mesmo que ocorre
>> quando o objeto não existe. O fato mais curioso é que se eu declarar o
>> array DENTRO da procedure, ele funciona normalmente, com o mesmo
> código.
>> Quando eu declaro como parte da classe, acontece isso. Alguém sabe???
>>
>> Elias Magalhães da Paixão Junior
>> ___________________________________
>> Análise de Sistemas e Banco de Dados
>> Consultoria e desenvolvimento de programas, sistemas e websites
>> Tel.: (0XX21) 8262-7955
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>  
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
> 
> 
> 

Responder a