GARANTIR DESCONTO

Fórum Erro de exception class EAccessViolation #553966

13/05/2016

0

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 -

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

Wesley

Responder

Post mais votado

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;

Rafael Bosco

Rafael Bosco
Responder

Gostei + 2

Mais Posts

14/05/2016

Raimundo Pereira

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
Responder

Gostei + 1

17/05/2016

Wesley

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
Responder

Gostei + 0

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

Aceitar