Fehler Exception-Klasse >External: SIGSEGV

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
prime1009
Beiträge: 3
Registriert: Di 6. Nov 2012, 17:33

Fehler Exception-Klasse >External: SIGSEGV

Beitrag von prime1009 »

Hi,
da ich leider noch blutiger Anfänger in Pascal bin, finde ich den Fehler nicht

Code: Alles auswählen

unit Unit2;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  lResources, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  ExtCtrls;
 
type
  TStamm=class
  public
    x,yaa: double;
    constructor Create;
    procedure Init(xneu,yneu:double);
  end;
 
  var
    dummy: double;
    stamm: tstamm;
 
implementation
constructor TStamm.Create;
begin
  x := 0;
  yaa := 0;
end;
procedure TStamm.Init(xneu,yneu:double);
begin
   dummy:=xneu;
   //showmessage(floattostr(dummy));
   //yaa:=yneu;
      yaa:=4;      //<------- hier tritt der Fehler Exception-Klasse >External:
                   //                                  SIGSEGV< ausgelöst
end;
end.
 
Der Aufruf erfolgt aus der Unit1 mit

Code: Alles auswählen

stamm.init (200,200)
Vielleicht kann ja jemand den Fehler sehen, den ich als Anfänger nicht finde.
Vielen Dank im Vorraus!
Gruß Prime1009

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehler Exception-Klasse >External: SIGSEGV

Beitrag von theo »

Das Problem ist wahrscheinlich in Unit1. Entweder du createst "stamm" gar nicht oder falsch.

prime1009
Beiträge: 3
Registriert: Di 6. Nov 2012, 17:33

Re: Fehler Exception-Klasse >External: SIGSEGV

Beitrag von prime1009 »

theo hat geschrieben:Das Problem ist wahrscheinlich in Unit1. Entweder du createst "stamm" gar nicht oder falsch.
Dann liefere ich mal die Unit1 nach!

Code: Alles auswählen

unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  lResources, Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
  ExtCtrls, unit2;
 
type
  tball=class
    farbe: tColor;
    x,y,vx,vy,r : double;
    procedure Init(fneu:tColor;xneu,yneu,vxneu,vyneu,rneu:double);
    procedure ZeigeDich;
    procedure BewegeDich;
  end;
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Bild: TImage;
    Timer1: TTimer;
    procedure BildClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  ball: TBall;
  stamm: tstamm;
implementation
 
{ TForm1 }
 
procedure TForm1.BildClick(Sender: TObject);
begin
 
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  bild.canvas.pen.width:=4;
   bild.canvas.brush.Color:=clwhite;
   bild.canvas.rectangle(0,0,bild.width, bild.height);
   bild.canvas.pen.width:=2;
   ball.init(clred,20,20,20,20,20);
   stamm.init (200,200)
 
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Ball.ZeigeDich;
   bild.canvas.Pixels[Round(ball.x),round(ball.y)]:=clBlack;
   Ball.BewegeDich;
   Ball.ZeigeDich;
end;
 
procedure tball.Init(fneu:tColor; xneu,yneu,vxneu,vyneu,rneu:double);
begin
   farbe:=fNeu;
   x:=xneu;
   y:=yneu;
   vx:=vxneu;
   vy:=vyneu;
   r:=rneu;
   //showmessage(inttostr(farbe))
end;
procedure tball.Zeigedich;
  begin
   form1.bild.canvas.Brush.color:=farbe;
   form1.bild.canvas.ellipse(round(x-r),round(y-r),round(x+r),round(y+r));
   form1.bild.canvas.pen.mode:=pmNOTXOR;;
   //showmessage('test')
  end;
procedure tball.Bewegedich;
begin
   x:=x+vx;
   y:=y+vy;
   if y>form1.bild.height-r-1 then
   begin
      y:=form1.bild.height-r-1;
      vy:=-vy;
   end;
end;
 
initialization
   ball:=tball.create;
{$I unit1.lrs}
   finalization
   ball.destroy;
end.
{$R *.lfm}
 
end.
 
Ich hoffe du kannst mir helfen, da ich schon zwei Tage nach einer Lösung suche!

Benutzeravatar
theo
Beiträge: 10872
Registriert: Mo 11. Sep 2006, 19:01

Re: Fehler Exception-Klasse >External: SIGSEGV

Beitrag von theo »

Ja, siehst du ja selber oder?

Bevor du auf "stamm" zugreifst, musst du es createn:

Code: Alles auswählen

 
stamm:=TStamm.Create;
stamm.init (200,200);
 
und irgendwann, z.B. OnDestroy:
 
stamm.free;
P.S. Bei "ball" machst du das ja auch.

prime1009
Beiträge: 3
Registriert: Di 6. Nov 2012, 17:33

Re: Fehler Exception-Klasse >External: SIGSEGV

Beitrag von prime1009 »

Danke, das Du die Bäume vor dem Wald weggeräumt hast!

Funktioniert! :D :D :D

Gruß Floripappa

Antworten