AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Pokerprojekt realisierung
Thema durchsuchen
Ansicht
Themen-Optionen

Pokerprojekt realisierung

Ein Thema von .chicken · begonnen am 28. Mär 2007 · letzter Beitrag vom 15. Mai 2007
 
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#11

Re: Pokerprojekt realisierung

  Alt 4. Apr 2007, 12:52
Zitat von .chicken:
Und zwar:
"Project LAN_Poker raised exception class EStackOverflow with message 'Stack overflow'"
Das tritt auf, wenn Du eine Rekursion hast, die nicht abbricht. Der Stack ist ein Stapel, auf dem Du Dinge ablegst. Du legst einfach was oben rauf und merkst Dir die Reihenfolge. Beim Runternehmen gehst Du (wie bei jedem Stapel) andersherum vor, das was oben liegt kommt zuerst runter. Der wird für verschiedene Dinge benutzt, z.B. werden hier Dinge abgelegt, wenn eine Methode sich selbst aufruft. Beispiel wäre die Fakultät, n! ist ja gerade n * (n-1)!. Nimmst Du nur diese Formel, dann merkt sich Delphi n (auf dem Stack) und berechnet (n-1)!, für (n-1)! wird (n-1) gemerkt und ((n-1)-1)! berechnet. Das Problem auch hier, es gibt noch keinen Rekursionsanker (wann ist man fertig). Natürlich gibt es den bei der Fakultät, hier gilt dass 0! = 0 ist und/oder 1! = 1. Irgendwann wurde also ganz viel von n abgezogen, so dass Du die Fakultät von 1 berechnen kannst und die kennst Du. Dann springt der zurück und findet dort 2* (1!), 1! kennst Du nun und kannst das ausrechnen, springst zurück und hast 3 * (2!),... Das zurückspringen nimmt einfach die Daten wieder vom Stack runter.
Der Stack ist dabei ein Speicher mit einer max. Größe. Legst Du also nur lang genug was darauf ab, gibt es einen Stackoverflow. Die Grenze ist dabei sehr hoch gesetzt, kommt es zu einem Stackoverflow, liegt das i.d.R. wirklich am Programm!

Schau einfach mal, wo sich eine Prozedur selbst aufruft (oder Du sonst einen Kreis hast). Als Hilfe kannst Du einfach einen Breakpoint (diese roten Punkte/ F5) setzen. Dort hält Delphi dann an, wenn Du das Programm ausführst. Hier kannst Du nun mit F7 in die Ausführung reinspringen und siehst, was Dein Code gerade macht. Bei größeren Schleifen kann das nerven, hier kannst Du auch einfach auf die Zeile hinter die Schleife einen neuen Breakpoint setzen und mit F9 die Ausführung fortsetzen. Die geht normal weiter, bis das Programm endet, ein Fehler auftritt oder ein Breakpoint den Ablauf erneut unterbricht.
  Mit Zitat antworten Zitat
 


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 03:07 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-2025 by Thomas Breitkreuz