Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Elisei

[Resolvido] Descobrir o erro pelo código

Recommended Posts

Olá, boa tarde a todos.

 

Estou executando um aplicação e neste processo me surge a seguinte mensagem de erro:

 

Access violation at address 00446684 in module 'ALMA.exe'. Read of  address 00000048.

Não estou fazendo tratamento de excessões em minha aplicação, porém não consigo descobrir onde está o problema.

Existe alguma forma de identificar o que está ocorrendo com esta mensagem de erro?

 

Não sei se fui claro, mas acho que isto é um erro comum.

Tentei encntrar uma tabela onde existam todos os códigos de erros no Delphi assim como existem em outras linguagens mas não encontrei.

 

Se alguem puder me ajudar, serei grato.

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade isso pode ser muitos problemas... pode ser um range de um vetor que está estourando, uma tentativa de acesso a uma posição inválida de memória... o ideal é você debugar até encontrar o trecho onde está ocorrendo o erro e fazer um tratamento de erros nele, e verificar o motivo pelo qual o erro ocorre com base neste debug de código fonte.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, bom dia.

 

Implementei a rotina de tratamento de exceções no meu evento click:

 

procedure TfrmAlma.BTALMAInfPessoaisClick(Sender: TObject);
begin
   try
   frmObreiros := TfrmObreiros.Create(Self);
   except
   on e: EAccessViolation do
   begin
	  MessageDlg('Houve uma violação de acesso, com a mensagem' + e.Message, MtError, [MbOk], 0);
   end;
   end;
end;

Porém o erro ainda permanece e não me mostra a MessageDlg.

 

O erro acontece no momento em que chamo (crio) o formulário (frmObreiros := TfrmObreiros.Create(Self);)

Trata-se de um MDIChield chamado de um MDIForm

 

Estou efetuando a tratativa do erro de forma errada?

Obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez porque o tipo de erro retornado não seja o mesmo que especificou no seu except... tenta por assim no tratamento do erro:

 

Try
	   frmObreiros := TfrmObreiros.Create(Self);
	Except on E : Exception do
		begin
		   MessageDlg('Houve uma violação de acesso, com a mensagem' + E.Message, MtError, [MbOk], 0);
		   Exit;
		End;
	End;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

 

Chrnos, desta forma também não tratou a exceção. Na verdade o problema está no momento da criação do formulário como colocou o port3r. O erro indica a linha do create.

 

O mais interessante é que surge a mensagem de erro mas o formulário abre normalmente quando clicado em ok, porem não efetua gravações no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você dispara algum evento no onCreate ou no onShow do form na hora que está criando ele? Verificou se o form já não foi criado antes em memória? Muitos programadores esquecem de retirar o form do autocreate do dpr quando criam um fonte novo e ai dá esses pau de memória no create... tente por isso na hora de dar o create:

 

if not assigned(frmObreiros) then
   frmObreiros := TfrmObreiros.Create(Self);

Esse teste impede do form ser criado 2 vezes na mesma aplicação...

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade eu crio o formulário e ao sair da aplicação, tanto pelo evento formclose ou pelo onclick de algum botão, sempre retiro o form da memória.

 

Não sei o que pode estar acontecendo. Muito estranho.

 

O procedimento que voce me mendou não adianta pois não é o caso.

 

procedure TfrmObreiros.PNGButton9Click(Sender: TObject);

begin

frmObreiros.Close;

frmObreiros := nil;

end;

 

procedure TfrmObreiros.FormClose(Sender: TObject;

var Action: TCloseAction);

begin

Action := caFree;

frmObreiros := nil;

end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não está já criando este form no source do seu projeto (Project -> View Source)? Se o form estiver sendo criado no fonte do source, a forma como está criando o seu form irá causar violação pelo que me lembro... agora, sem os fontes pra debugar fica difícil identificar onde está o erro do seu processo.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, bom dia.

Sim, ele já está sendo criado no source como mostra a seguir:

 

program ALMA;

uses
  Forms,
  unit_alma in 'unit_alma.pas' {frmAlma},
  unit_dm in 'unit_dm.pas' {DmAlma: TDataModule},
  unit_informacoes_legais_loja in 'unit_informacoes_legais_loja.pas' {frmInfLegaisLoja},
  unit_movimentacao_financeira in 'unit_movimentacao_financeira.pas' {frmMovimentacaoFinanceira},
  unit_agencias_bancarias in 'unit_agencias_bancarias.pas' {frmAgenciasBancarias},
  unit_formas_pagamento in 'unit_formas_pagamento.pas' {frmFormasPagamento},
  unit_ident_pgto_irmaos in 'unit_ident_pgto_irmaos.pas' {frmIdentPgtoIrmaos},
  unit_sessoes in 'unit_sessoes.pas' {frmSessoes},
  unit_obreiros in 'unit_obreiros.pas' {frmObreiros},
  unit_popup_contas_contabeis in 'unit_popup_contas_contabeis.pas' {frmPopUpContasContabeis},
  unit_historico_visitas in 'unit_historico_visitas.pas' {frmHistoricoVisitas},
  unit_relat_mens_obreiros in 'unit_relat_mens_obreiros.pas' {frmRelMensObreiros},
  unit_chapas in 'unit_chapas.pas' {frmChapas},
  unit_apuracao_eleicoes in 'unit_apuracao_eleicoes.pas' {frmApuracaoEleicoes},
  unit_processo_admissao in 'unit_processo_admissao.pas' {frmProcessoAdmissao},
  unit_geracao_boletos in 'unit_geracao_boletos.pas' {frmGeracaoBoletos},
  unit_trabalhos_apresentados in 'unit_trabalhos_apresentados.pas' {frmTrabalhosApresentados},
  unit_cargos_loja in 'unit_cargos_loja.pas' {frmCargosObreiros},
  unit_dependentes in 'unit_dependentes.pas' {frmDependentes},
  unit_aniversariantes_mes in 'unit_aniversariantes_mes.pas' {frmAniversariantesMes},
  unit_mensalidade_obreiros in 'unit_mensalidade_obreiros.pas' {frmMensalidadeObreiros},
  unit_inf_complementares in 'unit_inf_complementares.pas' {frmInfComplementares},
  unit_irmaos_visitantes in 'unit_irmaos_visitantes.pas' {frmIrmaosVisitantes},
  unit_edita_hist_visitas in 'unit_edita_hist_visitas.pas' {frm_selec_reg_edit};

{$R *.res}

begin
  Application.Initialize;
  Application.Title := 'ALMA - Administração de Lojas Maçônicas';
  Application.CreateForm(TfrmAlma, frmAlma);
  Application.CreateForm(TDmAlma, DmAlma);
  Application.Run;
end.

Mas todos os outros forms estão também e funcionam sem violação.

Embora já tenha repassado todos os componentes do form, vou repassar de novo, pois acredito que também poderá ser algum campo trocado no datasource do objeto com o nome do atributo da tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde.

O problema foi resolvido.

 

Debugando meu codigo, percebi que coloquei manualmente um comando para que o formulário abrisse em determinada posição da tela.

Porém tambem alterei a propriedade Windows State para Maximized.

 

Desta forma o conflito aconteceum ocasionando o erro mencionado.

 

Retirei o posicionamento do formulário e o erro não ocorreu mais.

 

Muito obrigado pela atenção.

caso encerrado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.