kompiliert, aber bei start SIGSEGV error

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
zwerg
Beiträge: 5
Registriert: Mi 14. Sep 2016, 12:53

kompiliert, aber bei start SIGSEGV error

Beitrag von zwerg »

Hallo zusammen,

es geht um folgenden Code:

"
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs;
const

m_erde = 5.974E27;
a_erde = 149.6E9;
e_erde = 0.0167;
m_sonne = 1.9884E30;
ekl_erde = 0; {Grad}
perihel_erde = 30; {Grad}
Genauig= 100;
scale = 1 / 1E9;

type

vek3d = record
x,y,z,r : double;
end;

Himob = class
constructor create(halbachse,exzentr,masse,massezentr,per,ekl: double);
procedure run;
public
X,Y,Z,Phi,R,V,m,m_z,a,e,perihel,ekliptik : double;
animated: boolean;
Bahndaten : array[0..Genauig*360] of vek3d;
end;

{ TForm1 }

TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;
Erde : Himob;

implementation

{$R *.lfm}

constructor Himob.Create(halbachse,exzentr,masse,massezentr,per,ekl: double);
begin
inherited Create;
a:=halbachse;
e:=exzentr;
m:=masse;
m_z:=massezentr;
Perihel:=per;
Ekliptik:=ekl;
animated:=false;
end;

procedure Himob.run;
begin
animated:=true;
end;

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
Erde.Create(a_Erde, e_Erde,m_erde, m_sonne, perihel_erde,ekl_erde);
Erde.run;

end;

end.

"

Im Prinzip alles recht simpel (die Himob-Klasse soll einen Planeten simulieren).
Das Kompilieren geht fehlerfrei;

Beim Starten bricht er ab mit SIGSEGV error und verweist auf die Zeile

" animated:=true; "

Ich habe hier auf getter und setter verzichtet (ja ich weiss, schlechter Stil).

Was ich nicht verstehe:
Wenn ich die Methode Himob.run weglasse und nur den constructor aufrufe startet alles fehlerfrei.
Die Initialisierung der Variablen klappt also... , wenn ich mit .run aber dann die boolean Variable setzen will kommt der SIGSEGV Fehler.

Woran liegt das ?

Gruss Zwerg.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: kompiliert, aber bei start SIGSEGV error

Beitrag von mse »

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
begin
 Erde:= Himob.Create(a_Erde, e_Erde,m_erde, m_sonne, perihel_erde,ekl_erde);
 Erde.run;
 

Die Darstellung als Programmcode kannst du im Forum folgendermassen erzielen (ohne die "*"!):
"
[*code=laz] 
procedure TForm1.FormCreate(Sender: TObject);
begin
Erde:= Himob.Create(a_Erde, e_Erde,m_erde, m_sonne, perihel_erde,ekl_erde);
Erde.run;
 [*/code]
"

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: kompiliert, aber bei start SIGSEGV error

Beitrag von Michl »

Hallo und willkommen im Lazarusforum!

Zur Frage: Der Konstruktor muss von der Klasse, nicht von der Instanz aufgerufen werden (https://www.delphi-treff.de/object-pascal/objekte-erzeugen-und-freigeben/#m2):

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  Erde := Himob.create(a_Erde, e_Erde,m_erde, m_sonne, perihel_erde,ekl_erde);
  Erde.run;
end;

PS: In Pascal ist es üblich dem Klassenbezeichner mit einem T starten zu lassen (z.B. THimob statt Himob).
PS2: Wenn du den Code hier im Forum per Highlighter setzt, ist er leichter lesbar.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

zwerg
Beiträge: 5
Registriert: Mi 14. Sep 2016, 12:53

Re: kompiliert, aber bei start SIGSEGV error

Beitrag von zwerg »

Hallo,

Danke euch für eure Ratschläge ! :wink:

"Zur Frage: Der Konstruktor muss von der Klasse, nicht von der Instanz aufgerufen werden"

:oops: wie peinlich.

So jetzt läufts. Danke.

Gruss Zwerg

Antworten