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] > > >