Einzelnen Beitrag anzeigen

Fernsch

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

Exception-Klasse >>External: SIGSEGV<<

  Alt 12. Okt 2018, 16: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 16:50 Uhr) Grund: Tag gefixt und mit Delphi-Tag ersetzt
  Mit Zitat antworten Zitat