AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Lazarus (IDE) Exception-Klasse >>External: SIGSEGV<<

Exception-Klasse >>External: SIGSEGV<<

Offene Frage von "Frickler"
Ein Thema von Fernsch · begonnen am 12. Okt 2018 · letzter Beitrag vom 16. Okt 2018
Antwort Antwort
Seite 1 von 2  1 2   
Fernsch

Registriert seit: 12. Okt 2018
4 Beiträge
 
#1

Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 15:44
Ich schreibe an einem kleinen Textadventure mit verschiedenen Räumen.
Lazarus weist auf keinen Fehler beim kompilieren hin, doch sobald ich das Programm starte erhalte ich diesen Fehler:
"Projekt p1 hat Exception-Klasse >>External: SIGSEV<< ausgelöst.
In Datei 'uadventure.pas' in Zeile 86:
Memo1.Lines.add(aktuellerRaum.Beschreibung); "
Ich habe bereits nach Lösungen gesucht, jedoch keine gefunden.

Der Code:
Delphi-Quellcode:
unit uAdventure;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  ExtCtrls, uKlassenname1;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Memo1Change(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
  { private declarations }
  public
  { public declarations }
  end;

var
  Form1: TForm1;
  Dachboden, Kueche, Keller, Schlafzimmer, Flur, Badezimmer, Garten, Wohnzimmer, Abstellkammer, Klavierzimmer: TRaum;
  aktuellerRaum: TRaum;
  Eingabe: String;

implementation

{$R *.lfm}

{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
   begin

    Memo1.Lines.add('Hallo, willkommen im Textadventure');


    Dachboden:=TRaum.Create;
    Kueche:=TRaum.Create;
    Keller:=TRaum.Create;
    Schlafzimmer:=TRaum.Create;
    Flur:=TRaum.Create;
    Badezimmer:=TRaum.Create;
    Garten:=TRaum.Create;
    Wohnzimmer:=TRaum.Create;
    Abstellkammer:=TRaum.Create;
    Klavierzimmer:=TRaum.Create;

    Dachboden.Beschreibung:=('Du bist nun im Dachboden.');
    Kueche.Beschreibung:=('Du bist nun in der Küche.');
    Keller.Beschreibung:=('Es muss sich um den Keller handeln.');
    Schlafzimmer.Beschreibung:=('Es muss sich wohl um das Schlafzimmer handeln.');
    Flur.Beschreibung:=('Du stehst im Flur.');
    Badezimmer.Beschreibung:=('Du betrittst das Badezimmer.');
    Garten.Beschreibung:=('Du betrittst Gras und merkst dass du im Garten bist.');
    Wohnzimmer.Beschreibung:=(' Es ist wohl das Wohnzimmer.');
    Abstellkammer.Beschreibung:=('Die Tür öffnet sich und du siehst nur eine kleine Abstellkammer.');
    Klavierzimmer.Beschreibung:=('Als erstes siehst du einen Klavier das mitten im Zimmer steht.');

    Dachboden.setAusgaenge(nil, nil, nil, nil, nil, Wohnzimmer);
    Kueche.setAusgaenge(nil, nil, Klavierzimmer, nil, nil, nil);
    Keller.setAusgaenge(Garten, nil, nil, nil, Wohnzimmer, nil);
    Schlafzimmer.setAusgaenge(nil,nil,nil, Wohnzimmer, nil, nil);
    Flur.setAusgaenge(Wohnzimmer, Badezimmer, Abstellkammer,nil,nil,nil);
    Badezimmer.setAusgaenge(nil, nil, FLur, nil, nil, nil);
    Garten.setAusgaenge( nil, Wohnzimmer, nil, nil, nil, Keller);
    Wohnzimmer.setAusgaenge(Schlafzimmer, Klavierzimmer, Garten, Flur, Dachboden, Keller);
    Abstellkammer.setAusgaenge(nil, Flur, nil, nil, nil, nil);
    Klavierzimmer.setAusgaenge(nil, Kueche, Wohnzimmer, nil, nil, nil);

    aktuellerRaum := Flur;
   end;

procedure TForm1.Button1Click(Sender: TObject);
begin
    Memo1.Lines.clear;

                  Memo1.Lines.add (aktuellerRaum.Beschreibung);

     begin
        Memo1.clear;
        Eingabe:= Edit1.text;

        if (Eingabe = 'Norden') and (aktuellerRaum.Norden <> nil) then
        aktuellerRaum := aktuellerRaum.norden;

        if (Eingabe = 'Osten') and (aktuellerRaum.Osten <> nil) then
        aktuellerRaum := aktuellerRaum.Osten;

        if (Eingabe = 'Sueden') and (aktuellerRaum.Sueden <> nil) then
        aktuellerRaum := aktuellerRaum.Sueden;

         if (Eingabe = 'Westen') and (aktuellerRaum.Westen <> nil) then
        aktuellerRaum := aktuellerRaum.Westen;

         if (Eingabe = 'Rauf') and (aktuellerRaum.Rauf <> nil) then
        aktuellerRaum := aktuellerRaum.Rauf;

         if (Eingabe = 'Runter') and (aktuellerRaum.Runter <> nil) then
        aktuellerRaum := aktuellerRaum.Runter;

        Memo1.Lines.add (aktuellerRaum.Beschreibung);

        if aktuellerRaum.Norden <> nil then Memo1.Lines.Add ('---> Norden');
        if aktuellerRaum.Osten <> nil then Memo1.Lines.Add ('---> Osten');
        if aktuellerRaum.Sueden <> nil then Memo1.Lines.Add ('---> Sueden');
        if aktuellerRaum.Westen <> nil then Memo1.Lines.Add ('---> Westen');
        if aktuellerRaum.Rauf <> nil then Memo1.Lines.Add ('---> Rauf');
        if aktuellerRaum.Runter <> nil then Memo1.Lines.Add ('---> Runter');

     end;

end;

procedure TForm1.Edit1Change(Sender: TObject);
begin

end;

procedure TForm1.Memo1Change(Sender: TObject);
begin

end;

end.




Wäre nett, wenn mir jemand helfen könnte.
LG Fernsch

Geändert von mkinzler (12. Okt 2018 um 15:50 Uhr) Grund: Tag gefixt und mit Delphi-Tag ersetzt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
38.823 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 15:54
Wie ist den TRaum deklariert?
Markus Kinzler
  Mit Zitat antworten Zitat
Fernsch

Registriert seit: 12. Okt 2018
4 Beiträge
 
#3

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 16:05
Hatte ich ganz vergessen.
Hier der Rest des Codes mit der Deklaration.


Delphi-Quellcode:
unit uKlassenname1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils;


type
  TRaum = class
   public
    Beschreibung : String;
    Norden, Sueden, Westen, Osten, Rauf, Runter: TRaum;

    procedure setAusgaenge (nord, ost, west, sued, up, down:TRaum);
  end;

implementation
 procedure TRaum.setAusgaenge(nord, ost, west, sued, up, down:TRaum);
           begin
             self.Norden :=nord;
             self.Osten :=ost;
             self.Westen :=west;
             self.Sueden :=sued;
             self.Rauf :=up;
             self.Runter :=down;
end;
      end.

Geändert von Fernsch (12. Okt 2018 um 16:07 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
6.348 Beiträge
 
Delphi XE4 Professional
 
#4

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 16:49
Hallo,
sicher, dass das wirklich das ganze Programm ist?
Ich sehe zumindestens keinen Fehler.

du kannst ja mal prüfen, was aktuellerRaum.ClassName zurückliefert,
bevor Du die Zeile Memo1.Lines.add (aktuellerRaum.Beschreibung); ausführst.

Wie sieht es denn mit Breakpoints aus?
Heiko
  Mit Zitat antworten Zitat
Fernsch

Registriert seit: 12. Okt 2018
4 Beiträge
 
#5

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 17:12
Hallo,
ja das ist das ganze Programm.
Bei aktuellerRaum.ClassName erhalte ich wieder den Exception-Klasse Fehler.

VG
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
6.348 Beiträge
 
Delphi XE4 Professional
 
#6

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 18:08
Hallo,
Zitat:
ja das ist das ganze Programm.
Kann gar nicht sein, es fehlt z.B. die DPR.
Zip mal den ganzen Projekt-Ordner und lade ihn hoch.


Gleich beim Programmstart oder beim Klick auf den Button?
Heiko
  Mit Zitat antworten Zitat
Fernsch

Registriert seit: 12. Okt 2018
4 Beiträge
 
#7

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 18:46
Hallo,
beim Klick auf den Button.

VG
Angehängte Dateien
Dateityp: zip Textadventure1.zip (356,9 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
550 Beiträge
 
Delphi 7 Professional
 
#8

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 19:50
Bin mir nicht sicher, ob ich das hier verstanden habe:

aktuellerRaum ... sind alle vom Typ TRaum und werden im FormCreate erstellt.

Sie verfügen alle über die Attribute Norden, Sueden, Westen, Osten, Rauf und Runter. Diese sind ebenfalls vom Typ TRaum. Die werden aber nirgendwo erstellt.

Für TRaum ist kein Create implementiert. Eigentlich hätte ich aber einen Konstruktor Create für die Klasse TRaum erwartet, ebenso einen Destruktor, in dem eine Freigabe der Räume erfolgt.

Allerdings sehe ich da momentan ein Problem:

Wenn im Create von z. B. aktuellerRaum Norden, Sueden, Westen, Osten, Rauf und Runter erstellt werden, müssen auch in deren Create deren Norden, Sueden, Westen, Osten, Rauf und Runter erstellt werden, wobei auch deren Create für die Erstellung von deren Norden, Sueden, Westen, Osten, Rauf und Runter zusändig sind. Dann kommen noch deren Creates und deren Norden, Sueden, Westen, Osten, Rauf und Runter mit deren Creates ... und irgendwann folgt dann External: SIGSEGV.

Das Grundkonzept scheint mir überdenkungswürdig.
  Mit Zitat antworten Zitat
Scurra

Registriert seit: 19. Jan 2015
51 Beiträge
 
Delphi 10 Seattle Professional
 
#9

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 16. Okt 2018, 09:40
Der FormCreate-Eventhandler ist nicht mit dem entsprechenden Event im Formular verknüpft.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
6.348 Beiträge
 
Delphi XE4 Professional
 
#10

AW: Exception-Klasse >>External: SIGSEGV<<

  Alt 16. Okt 2018, 09:42
Hallo,
OK, dass der Aufruf des FormCreate per Breakpoint geprüft wurde, hatte ich erwartet ...
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2018 by Daniel R. Wolf