Erro de exception class EAccessViolation
Boa noite, estou fazendo um exercício para criação de classe e me deparei com o seguinte erro -
'Project1.exe raised exception class EAccessViolation with messagem 'Access violation at address 0044F086 in module Project.exe'
Já verifiquei que tal erro possivelmente ocorre quando o sistema está tentando acessar uma determinada região da memória ou objeto que ainda não foi criado na aplicação, mas como é um exercício bem simples não consigo ver o óbvio. debbugando o erro ocorre logo na primeira linha de comando da procedure do botão inserido na aplicação, segue o código abaixo -
obs - já tentei jogar os valores direto por exemplo -
Maratona1.quilometros := 200;
e mesmo assim o problema persiste
'Project1.exe raised exception class EAccessViolation with messagem 'Access violation at address 0044F086 in module Project.exe'
Já verifiquei que tal erro possivelmente ocorre quando o sistema está tentando acessar uma determinada região da memória ou objeto que ainda não foi criado na aplicação, mas como é um exercício bem simples não consigo ver o óbvio. debbugando o erro ocorre logo na primeira linha de comando da procedure do botão inserido na aplicação, segue o código abaixo -
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TMaratona = class
quilometros, corredores: integer;
function DistanciaporCorredor: integer;
end;
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Maratona1: TMaratona;
implementation
{$R *.dfm}
function TMaratona.DistanciaporCorredor: integer;
begin
result:= (quilometros div corredores);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Maratona1.quilometros := StrToint(Edit1.Text);
Maratona1.corredores:= StrToInt(Edit2.Text);
Edit3.Text:= IntToStr(Maratona1.DistanciaporCorredor)
end;
end.obs - já tentei jogar os valores direto por exemplo -
Maratona1.quilometros := 200;
e mesmo assim o problema persiste
Wesley
Curtidas 0
Melhor post
Rafael Bosco
16/05/2016
O Objeto TMaratona, não está criado, tente:
procedure TForm1.Button1Click(Sender: TObject);
begin
Maratona1 := TMaratona.Create;
try
Maratona1.quilometros := StrToint(Edit1.Text);
Maratona1.corredores:= StrToInt(Edit2.Text);
Edit3.Text:= IntToStr(Maratona1.DistanciaporCorredor);
finally
Maratona1.Destroy;
end;
GOSTEI 2
Mais Respostas
Raimundo Pereira
13/05/2016
unit Umaratona;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TMaratona = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function DistanciaporCorredor: integer;
end;
var
Maratona: TMaratona;
quilometros,corredores:integer;
implementation
{$R *.dfm}
function TMaratona.DistanciaporCorredor: integer;
begin
result:= (quilometros div corredores);
end;
procedure TMaratona.Button1Click(Sender: TObject);
begin
quilometros := StrToint(Edit1.Text);
corredores:= StrToInt(Edit2.Text);
Edit3.Text:= IntToStr(DistanciaporCorredor);
end;
end.
Resultado do Código
Resultado
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TMaratona = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function DistanciaporCorredor: integer;
end;
var
Maratona: TMaratona;
quilometros,corredores:integer;
implementation
{$R *.dfm}
function TMaratona.DistanciaporCorredor: integer;
begin
result:= (quilometros div corredores);
end;
procedure TMaratona.Button1Click(Sender: TObject);
begin
quilometros := StrToint(Edit1.Text);
corredores:= StrToInt(Edit2.Text);
Edit3.Text:= IntToStr(DistanciaporCorredor);
end;
end.
Resultado do Código
Resultado
GOSTEI 1
Wesley
13/05/2016
valeu pelas respostas, de fato os dois códigos serviram, mas como eu não podia alterar os objetos da classe eu tive que usar a segunda opção de criar o Maratona1
GOSTEI 0