AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stack overflow, aber warum?

Ein Thema von bluePhoenix · begonnen am 16. Sep 2007 · letzter Beitrag vom 17. Sep 2007
Antwort Antwort
bluePhoenix

Registriert seit: 16. Sep 2007
2 Beiträge
 
#1

Stack overflow, aber warum?

  Alt 16. Sep 2007, 14:27
Erstmal hoffe ich, dass ich hier in der Rubrk richtig bin.
Ich habe 3 Jahre nicht mehr programmiert und woltle mal wieder etwas ganz kleines programmieren.
Alles läuft gut, doch dann wollte ich lediglich close ausführen und mir wirft es einen e-stack overflow vor die Tür. Habe schon probiert den stack zu vergößern, hat ncht geholfen. Dürfte auch nix rekursives im Text haben. vielleicht könt ihr mir ja helfen.

Bei dem Programm sol les sich lediglich um einen Chargenerator handeln für ein PnP.
Natürlich ist einiges unschön programmiert und auch da bin ich für tips dankbar, aber hauptsächlch geht es darum den exception auszumerzen, der geworfen wird, wenn ich die Hauptform mit close; schließe.


Unit1
Delphi-Quellcode:
var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  form1.visible := false;
  form2.visible := true;
end;

procedure TForm1.ProgrammBeenden1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   close;
end;

procedure TForm1.neuenCharakererstellen1Click(Sender: TObject);
begin
  form1.visible := false;
  form2.visible := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;

end.
Unit2
Delphi-Quellcode:
var
  Form2: TForm2;
  nuyen, lebensstil, gpgeld : integer;

implementation

uses Unit3, Unit4, Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  form3.visible := true;
  nuyen := nuyen + Lebensstil;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  nuyen := 0
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  form4.visible := true;
  Nuyen := Nuyen - gpgeld * 5000;
end;

procedure TForm2.Button3Click(Sender: TObject);
begin
  close;
end;
Unit3
Delphi-Quellcode:
var
  Form3: TForm3;
  Metatyp, Name, alter, stil, geschlecht, klasse: string;
  Genpunkte, kosten, temp : integer;

implementation

uses Unit2, Unit1, Unit5;

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.Add('Mensch');
  ComboBox1.Items.Add('Zwerg');
  ComboBox1.Items.Add('Elf');
  ComboBox1.Items.Add('Ork');
  ComboBox1.Items.Add('Troll');

  ComboBox2.Items.Add('männlich');
  ComboBox2.Items.Add('weiblich');

  ComboBox3.Items.Add('Luxus');
  ComboBox3.Items.Add('Oberschicht');
  ComboBox3.Items.Add('Mittelschicht');
  ComboBox3.Items.Add('Unterschicht');
  ComboBox3.Items.Add('Squatter');
  ComboBox3.Items.Add('Auf der Strasse');

  ComboBox4.Items.Add('Keine');
  ComboBox4.Items.Add('Adept');
  ComboBox4.Items.Add('Magieradept');
  ComboBox4.Items.Add('Magier');
  ComboBox4.Items.Add('Technomancer');

  kosten := 0;
  temp := 0;
  Genpunkte := 0;
end;

procedure TForm3.ComboBox1Change(Sender: TObject);
begin
  case combobox1.ItemIndex of
    0: begin
        Metatyp := 'Mensch';
        kosten := 0;
       end;
    1: begin
        Metatyp := 'Zwerg';
        kosten := 50;
       end;
    2: begin
        Metatyp := 'Elf';
        kosten := 50;
       end;
    3: begin
        Metatyp := 'Ork';
        kosten := 75;
       end;
    4: begin
        Metatyp := 'Troll';
        kosten := 155;
       end;
  end;
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
  Name := edit1.Text;
  Alter := edit2.text;
  Genpunkte := strtoint(edit3.text);
  form2.panel2.caption := Metatyp;
  form2.panel12.caption := klasse;
  form2.panel1.caption := Name;
  form2.panel3.caption := alter;
  form2.panel11.caption := inttostr(Genpunkte - kosten - temp) + ' von ' + inttostr(Genpunkte);
  form2.label12.caption := inttostr(kosten) + 'GP';
  form2.label15.caption := inttostr(temp) + 'GP';
  nuyen := nuyen - Lebensstil;
  form2.panel13.caption := inttostr(nuyen);
  form2.Panel5.caption := stil;
  form3.visible := false;
  form2.panel4.caption := geschlecht;
end;

procedure TForm3.ComboBox2Change(Sender: TObject);
begin
  case combobox2.ItemIndex of
    0: begin
        Geschlecht := 'männlich';
       end;
    1: begin
        Geschlecht := 'weiblich';
       end;
  end;
end;

procedure TForm3.ComboBox3Change(Sender: TObject);
begin
  case combobox3.ItemIndex of
    0: begin
        stil := 'Luxus';
        Lebensstil := 100000;
       end;
    1: begin
        stil := 'Oberschicht';
        Lebensstil := 10000;
       end;
    2: begin
        stil := 'Mittelschicht';
        Lebensstil := 5000;
       end;
    3: begin
        stil := 'Unterschicht';
        Lebensstil := 2000;
       end;
    4: begin
        stil := 'Squatter';
        Lebensstil := 500;
       end;
    5: begin
        stil := 'Auf der Straße';
        Lebensstil := 0;
       end;
  end;
end;

procedure TForm3.ComboBox4Change(Sender: TObject);
begin
  case combobox4.ItemIndex of
    0: begin
        klasse := 'Keine';
        temp := 0;
       end;
    1: begin
        klasse := 'Adept';
        temp := 20;
       end;
    2: begin
        klasse := 'Magieradept';
        temp := 30;
       end;
    3: begin
        klasse := 'Magier';
        temp := 40;
       end;
    4: begin
        klasse := 'Technomancer';
        temp := 20;
       end;
  end;
end;

procedure TForm3.Button1Click(Sender: TObject);
begin
  form5.memo1.clear;
  case combobox1.ItemIndex of
    0: begin
        form5.memo1.Lines.add('Metatyp: Mensch (Homo sapiens sapiens)');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('GP Kosten: 0');
        form5.memo1.Lines.add('');
        form5.memo1.lines.add('Beschreibung: Menschen bilden noch immer eine leichte Mehrheit der durchschnittlichen Weltbevölkerung. Die meisten sind 1,75m groß und wiegen knapp 80kg. Sechzig Jahre' + 'nach dem Erwachen werden die Menschen von Laien und wissenschaftlichen Organisationen noch immer als "Die Norm" betrachtet und sind üblicherweise die' + 'Messlatte, mit der die anderen Metatypen verglichen werden');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('Fähigkeiten: Edge +1');
       end;
    1: begin
        form5.memo1.Lines.add('Metatyp: Zwerg (Homo sapiens pumilionis)');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('GP Kosten: 50');
        form5.memo1.Lines.add('');
        form5.memo1.lines.add('Beschreibung: Durchschnittsgröße: 1,20m Durchschnittsgewicht: 54kg durchschnittliche Lebenserwartung über 100 Jahre');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('Fähigkeiten: Infrarotsicht, +2 Würfel für Konstitutionsproben gegen Pathogene und Toxine, Konstitution +1, Reaktionsmaximum -1, Stärk +2, Willenskraft +1');
       end;
    2: begin
        form5.memo1.Lines.add('Metatyp: Elf (Homo sapiens nobilis)');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('GP Kosten: 50');
        form5.memo1.Lines.add('');
        form5.memo1.lines.add('Beschreibung: Durchschnittsgröße: 1,90m Durchschnittsgewicht: 80kg durchschnittliche Lebenserwartung: mehrere hundert Jahre');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('Fähigkeiten: Restlichtverstärkung, +1 Geschicklichkeit, +2 Charisma');
       end;
    3: begin
        form5.memo1.Lines.add('Metatyp: Ork (Homo sapiens robustus)');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('GP Kosten: 75');
        form5.memo1.Lines.add('');
        form5.memo1.lines.add('Beschreibung: Durchschnittsgröße: 1,90m Durchschnittsgewicht: 128kg durchschnittliche Lebenserwartung: 35-45 Jahre');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('Fähigkeiten: Restlichtverstärkung, Konstitution +3, Stärke +2, Charismagrenze -1, Logikgrenze -1');
       end;
    4: begin
        form5.memo1.Lines.add('Metatyp: Troll (Homo sapiens ingentis)');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('GP Kosten: 155');
        form5.memo1.Lines.add('');
        form5.memo1.lines.add('Beschreibung: Durchschnittsgröße: 2,50m Durchschnittsgewicht: 300kg durchschnittliche Lebenserwartung: 55 Jahre');
        form5.memo1.Lines.add('');
        form5.memo1.Lines.add('Fähigkeiten: Infrarotsicht, Nahkampfreichweite +1, Natürliche Panzerung +1 (kulmulativ mit getragener Panzerung), Konstitution +4, Geschicklichkeitsgrenze -1, Stärke +4, Charismagrenze -2, Intuitionsgrenze -1, Logikgrenze -1');
       end;
  end;
  form5.visible := true;
end;

procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  close;
end;
Unit4
Delphi-Quellcode:
var
  Form4: TForm4;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
  gpgeld := strtoint(edit1.text);
  nuyen := nuyen + GPgeld * 5000;
  form2.panel13.caption := inttostr(nuyen);
  form4.Visible := false;
end;
Unit5
Delphi-Quellcode:
var
  Form5: TForm5;

implementation

{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);
begin
  form5.Visible := false;
end;

Hoffe ihr habt mein Problem verstanden und könnt mir helfen

greets blue
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Stack overflow, aber warum?

  Alt 16. Sep 2007, 14:36
Hab mir nicht alles angeguckt aber du solltest das Close aus dem Form.OnClose rausholen... Denn Close ruft wieder OnClose auf usw. Daran wirds liegen denk ich...
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
bluePhoenix

Registriert seit: 16. Sep 2007
2 Beiträge
 
#3

Re: Stack overflow, aber warum?

  Alt 16. Sep 2007, 14:39
Danke, das wars auch, wasn doofer fehler.
Waru mauch immer habe ich gedacht, dass das da noch rein muss
Kann eigentlch weg der thread nun.

*vor die stirn hau*
Mensch bin ich eingerostet
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Stack overflow, aber warum?

  Alt 16. Sep 2007, 14:54
Moin bluePhoenix,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Zitat von bluePhonix:
Kann eigentlch weg der thread nun.
Warum? Sollte mal jemand anderes ein ähnliches Problem haben, kann man so über die Suche eine Lösung finden.
Stell Dir mal vor jede beantwortete Frage würde gelöscht werden...


Aber noch mal kurz was Allgemeines zum Stack-Overflow:
Wenn man nicht gerade wissentlich Rekursionen mit grosser Rekursionstiefe und/oder grossen lokalen Datenbereichen im Programm hat, deutet das eigentlich immer auf eine fehlerhafte Abbruchbedinung in einer Rekursion hin.


BTW:
Formxxx.Visible := true; entspricht Formxxx.Show;
Formxxx.Visible := false; entspricht Formxxx.Close;

evtl. Solltest Du Dir dann auch mal TForm.ShowModal und TButton.ModalResult anschauen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von RavenIV
RavenIV

Registriert seit: 12. Jan 2005
Ort: Waldshut-Tiengen
2.875 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Stack overflow, aber warum?

  Alt 17. Sep 2007, 09:06
Zitat von Christian Seehase:
BTW:
Formxxx.Visible := true; entspricht Formxxx.Show;
Formxxx.Visible := false; entspricht Formxxx.Close;
Korrektur:
Formxxx.Visible := false; entspricht Formxxx.Hide;
Klaus E.
Linux - das längste Text-Adventure aller Zeiten...
Wer nie Linux mit dem vi konfiguriert hat, der hat am Leben vorbei geklickt.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz