![]() |
Fehlermeldung "external SIGSEGV"
Servus Leute,
ich versuche mich momentan an Snake in Delphi für ein Schulprojekt und habe momentan ein nervigen Fehler. Unzwar kommt immer wenn ich meinen BitBtn1 klicke folgende Fehlermeldung: "Projekt project1 hat Exception-Klasse >External:SIGSEGV< ausgelöst. In Datei `unit1.pas` in Zeile 58: Paintbox1.Canvas.Pen.Width=10;" Ich habe auch schon probiert diesen Befehl auszuklammern doch dann bezieht sich der Fehler auf den Befehl in Zeile 59.
Code:
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons; type { TForm1 } TForm1 = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; Image1: TImage; PaintBox1: TPaintBox; procedure BitBtn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } public { public declarations } end; //Schlange type TPunkt = class private public procedure paint(xWert, yWert:integer); end; var Form1: TForm1; xWert: integer; yWert: integer; punkt: TPunkt; Paintbox1 : TPaintbox; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin //Logo Image1.Picture.LoadFromFile('Logo.jpg'); end; procedure TPunkt.paint(xWert, yWert: integer); begin Paintbox1.Canvas.Pen.Width:= 10; Paintbox1.Canvas.Pen.Color:=clLime; Paintbox1.Canvas.MoveTo(xWert,yWert); Paintbox1.Canvas.LineTo(xWert,yWert); end; procedure TForm1.BitBtn1Click(Sender: TObject); var xWert, yWert: integer; begin punkt:=TPunkt.create; xWert:=10; yWert:=10; punkt.paint(xWert, yWert); end; end. |
AW: Fehlermeldung "external SIGSEGV"
Du hast zwei Mal Paintbox1 deklariert.
Das obere ist eine automatische Deklaration, nachdem du die PaintBox auf dein Formular gepackt hast. Die untere ist von dir. Entferne mal das untere und teste dann. Die beiden globalen Variablen xWert und yWert kannst du auch entfernen. Genau wie Punkt. Deklariere Punkt direkt im BitBtn. Ich würde das alles generell anders machen und die Klasse TPunkt komplett weglassen. |
AW: Fehlermeldung "external SIGSEGV"
Zitat:
Geh mal auf Menü > Start > Parameter > Arbeitsverzeichnis (ich hoffe das ist in Lazarus an der selten Stelle, aber glaub schon), schreib dort
Delphi-Quellcode:
rein und drück beherzt auf F9.
C:\
|
AW: Fehlermeldung "external SIGSEGV"
Zitat:
|
AW: Fehlermeldung "external SIGSEGV"
Zitat:
|
AW: Fehlermeldung "external SIGSEGV"
Habe mal den Quelltext ein bisserl verändert:
Delphi-Quellcode:
Schau mal bitte, ob es so funktioniert und wenn ja, erkläre uns bitte warum.
unit Unit1;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls, Buttons; type { TForm1 } TForm1 = class(TForm) BitBtn1: TBitBtn; BitBtn2: TBitBtn; Image1: TImage; PaintBox1: TPaintBox; procedure BitBtn1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { private declarations } procedure MyPaint(xWert, yWert:integer); public { public declarations } end; end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin //Logo Image1.Picture.LoadFromFile('Logo.jpg'); end; procedure TForm1.MyPaint(xWert, yWert: integer); begin Paintbox1.Canvas.Pen.Width := 10; Paintbox1.Canvas.Pen.Color := clLime; Paintbox1.Canvas.MoveTo(xWert,yWert); Paintbox1.Canvas.LineTo(xWert,yWert); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin MyPaint(10, 10); end; end. |
AW: Fehlermeldung "external SIGSEGV"
Ich habe deinen Quelltext 1:1 übernommen und nun funktioniert es auch, dass ich den besagten Punkt zeichen kann. DU HAST MIR DAMIT SEHR GEHOLFEN!
|
AW: Fehlermeldung "external SIGSEGV"
Komisch ist nur warum es bei mir die ganze Zeit gesponnen hat. Aber das kann ein kleiner Denkfehler gewesen sein. :)
|
AW: Fehlermeldung "external SIGSEGV"
Schau Dir bitte die Unterschiede an und versuche sie zu verstehen, sonst machst Du den Fehler in Zukunft vermutlich regelmäßig wieder.
Dashier Zitat:
|
AW: Fehlermeldung "external SIGSEGV"
Du hattest Variablen doppelt.
Das ist grundsätzlich nicht schlimm, wenn man auch Alle Versionen richtig initialisiert und übergibt/überträgt. Wenn es nicht knallt, dann wird FormCreate nicht ausgeführt oder Lazarus hat einen Bug. (Letzteres glaub ich fast nicht) Ansonsten müsste bei dir die Datei C:\Logo.jpg existieren, was sie vermutlich nicht tut. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz