Erros de memoria - Access Violation - Dicas?

Delphi

18/01/2005

Meu sistema está dando alguns erro sem aparente explicação:

Access violation at address 004547F9 in module ´PROGCONTROL.EXE´. Read of address FFFFFFFF

Access violation at address 0041B241 in module ´PROGCONTROL.EXE´. Read of address FFFFFFFF

Access violation at address 00000009. Write of address 033A79D1  

Access violation at address 72507365. Read of address 72507365

Access violation at address 00000013. Write of address 030A1A9C 

Access violation at address 00000009. Write of address 033A672D


São mensagens que as vezes aparecem e as vezes não. Alguem poderia me dar uma explicação melhor sobre isso para que eu possa procurar a solução.

Obrigado :roll:


Marbravo

Marbravo

Curtidas 0

Melhor post

Massuda

Massuda

19/01/2005

O que não soluciona nada como remover da memoria?

Não entendi o que você quis dizer com ´remover da memória´... tanto faz Action = CaFree no OnClose ou Form.Release já que ambos destroem o form e, consequentemente, liberam a memória associada com o form.


GOSTEI 1

Mais Respostas

Bruno_fantin

Bruno_fantin

18/01/2005

Esse erro quer dizer... ´Você está tentando acessar um objeto que não existe...´

Para arrumar isso você tem que rever todo o codigo do seu programa para ver o que está fazendo de errado...

Em algum lugar você está matando um objeto e depois está tentando usar ele...


GOSTEI 0
Massuda

Massuda

18/01/2005

Geralmente isso está relacionado com tentativas de utilizar objetos que já foram destruídos (automaticamente ou não) em algum do programa.

Para facilitar, tente determinar onde o erro está ocorrendo. Para isso:[list:8cae30a2d8][*:8cae30a2d8]marque as opções de debug em Project/Options/Compiler/Debugging[*:8cae30a2d8]dê um build (menu Project/Build) no seu programa[*:8cae30a2d8]inicie a execução do seu programa[*:8cae30a2d8]volte no Delphi[*:8cae30a2d8]no menu Search/Find Error, informe o endereço do erro (por exemplo 004547F9)[/list:u:8cae30a2d8]Com um pouco de sorte, o Delphi irá mostrar a linha problemática.


GOSTEI 0
Paulo_amorim

Paulo_amorim

18/01/2005

Olá

Lembrando que o acesso a objetos ainda não criados também dá esse erro. Assim, erros em eventos OnCreate , bem como acesso a objetos que devem ser instanciados em tempo de execução mas não o foram, gerarão esse erro.

Até+


GOSTEI 0
Marbravo

Marbravo

18/01/2005

O erro é que estou usando o Vcl Skin e quando no onclose eu coloco para remover da memoria ( Freeandnil(Self); ) ele da o erro. Debugando vi que quando eu destruia ele procurava um arquivo que não tenho WinSkinForm.pas...

e agora?

O que fazer?

Com Action := CaFree funciona mas com Freeandnil(Self) da erro...


Solução?

Dicas?

Agradeço desde já


GOSTEI 0
Marbravo

Marbravo

18/01/2005

O erro é que estou usando o Vcl Skin e quando no onclose eu coloco para remover da memoria ( Freeandnil(Self); ) ele da o erro. Debugando vi que quando eu destruia ele procurava um arquivo que não tenho WinSkinForm.pas...

e agora?

O que fazer?

Com Action := CaFree funciona mas com Freeandnil(Self) da erro...


Solução?

Dicas?

Agradeço desde já


GOSTEI 0
Paulo_amorim

Paulo_amorim

18/01/2005

Olá

Ele está tentando se destruir enquanto está dentro de um evento dele mesmo! Simulei aqui e também deu AV

Tente colocar a liberação no Form que chamou esse seu form, e não dentro dele mesmo:
SeuForm := TSeuForm.Create(Self);
SeuForm.ShowModal;
SeuForm.Free;


Espero que ajude
Até+


GOSTEI 1
Massuda

Massuda

18/01/2005

Se seu form não for modal e você precisa que seu form se auto-destrua (´suicídio´), use a procedure TForm.Release ao invés de chamar TForm.Free.


GOSTEI 0
Marbravo

Marbravo

18/01/2005

Eu estou usando formularios MDI (MDIChild e MDIForm) por isso não posso usar ShowModal e estou usando Action := CaFree no Onclose, que creio eu seja a mesma coisa que Form.Release...

O que não soluciona nada como remover da memoria?


?
Obrigado


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

18/01/2005

Colega,

A forma que está utilizando no OnClose do formulário filho (MDI) está correta, ou seja, Action := caFree. Entretanto, acredito que o problema esteja ocorrendo antes disso e como já mencionado, está ocorrendo em face de tentar utilizar um objeto antes de ser criado ou após ter sido liberado. Pode adicionar um fragmento do código para verificarmos melhor?


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

18/01/2005

Colega,

Agora que li completamente todas as mensagens, acredito que o problema seja no componente de SKIN. Porém, só para ratificar, o uso de caFree no OnClose de formulários MDI está correto.


GOSTEI 0
Domingosafn

Domingosafn

18/01/2005

Como posso verificar se um objeto existe na memória, antes de acessá-lo, evitando o erro? No meu caso são índices de vetores, preciso saber se há threads alocadas neles.

Valeu.


GOSTEI 0
Amauri Alves

Amauri Alves

18/01/2005

Bom dia,
Aproveitando o post gostaria de colocar uma situação que pelo menos para mim é inovadora: Ele está me dando erro de violação de acesso antes de executar qualquer coisa no sistema, coloquei o projeto inteiro para debugar, ele me da este erro antes de qualquer create, antes de executar qualquer linha do projeto e em função disto não consigo ter ideia de onde pode estar este erro, alguém já passou por algo semelhante?
GOSTEI 0
POSTAR