Access Violation! O Que pode ser¿

16/03/2003

0

Oi galera!!!
Estou arrancando os cabelos aqui com um probleminha nojento...
:shock: Meu programa funcionava perfeitamente ontem, porem hoje fiz algumas pequenas
modificações e recebi a seguinte mensagem:

---------------------------
Debugger Exception Notification
---------------------------
Project ProjectGerenciamento.exe raised exception class EAccessViolation
with message ´Access violation at address 00404600 in module
´PROJECTGERENCIAMENTO.EXE´. Read of address FFFFFFFF´. Process stopped. Use
Step or Run to continue.
---------------------------

Ok... o problema eh que mesmo ao desfazer as modificações de hoje, o
programa continua dando o mesmo erro... e sempre para a mesma linha do
programa (dexa ela com uma setinha verde sabe...), naum importa o que tenha
na linha:
--------- codigo onde aparece o problema -----
procedure TFormMovimento.ButtonOKClick(Sender: TObject);
begin
With ClientDataSetItens do
begin
cont:=1;
While not eof do
begin
Produto[cont]:=FieldValues[´Produto´];
{Linha do problema} Descricao[cont]:=FieldValues[´Descricao´];
Preco[cont]:=FieldValues[´Preco´];
Quantidade[cont]:=FieldValues[´Quantidade´];
Total[cont]:=FieldValues[´Total´];
Peso[cont]:=FieldValues[´PesoTotal´];
cont:=cont+1;
next;
end;
with FormMovimentoFechamento do
begin
cont:=1;
PesoTotal:=0;
while cont <> 0 do
begin
PesoTotal:=PesoTotal+StrToFloat(peso[cont]);
cont:=cont+1;
label1.Caption:=FloatToStr(PesoTotal);
end;
ShowModal;
end;
end;
end;

o que pode estar acontecendo? o que eh access Violation??? como posso
resolver isto???

Valeu!!!
Aquele Abraço!!!

Tiago Farinon


Anonymous

Anonymous

Responder

Posts

16/03/2003

Anonymous

Sobre o que significa access violation, bem, significa exatemente o que você lê, ou seja, violação de acesso.

Simplificadamente, você deve estar tentando acessar uma propriedade ou fazendo referência direta a uma classe que não existe em tempo de execução ou mais comumente, você deve estar tentando acessar uma propriedade ou fazendo referência direta a uma classe que AINDA NÃO FOI CRIADA, ou seja, o famoso erro de lógica, que não provoca avisos do compilador, mas dá mó bronca quando você executa seu programa.

Você disse que mesmo após desfazer alterações o erro continuou, certo?
A solução para isso é RECONSTRUIR seu programa, simplesmente clicando em ´Build All´ (ou Build <nomedesuaaplicação>). Isso irá reconstruir todos os DCUs a partir dos arquivos PAS originais de seu programa.

Não dá pra identificar o problema simplesmente lendo o seu trecho de código pois em geral erros de violação são propagados através de várias classes. Pode ser que o erro nem esteja nesse seu trecho de código.

A dica é a seguinte: Coloque um Breakpoint na primeira linha da implementação dentro do evento clique do seu botão, isto é, mova o cursor em cima da linha que contém

With ClientDataSetItens do

e pressione F5. A linha ficará vermelha.
Execute seu programa e clique no botão normalmente, você será enviado para o código fonte. Basta agora pressionar F7 algumas vezes, com isso você estará seguindo o fluxo do seu programa e encontraré o local exato do erro. Quando você encontrar o local exato do erro você poderá fazer uma verificação para saber se você está chamando alguma coisa que não foi criada ainda ou algo similar...

PS.: Pode ser que você precise pressionar muitas vezes a tecla F7 até chegar o erro. SEJA PACIENTE!

Se você nunca usou Breakpoits pode ser estranho, mas é muito útil!


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar