Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stack overflow / Speichermangel abfangen ? (https://www.delphipraxis.net/6894-stack-overflow-speichermangel-abfangen.html)

Shadow 26. Jul 2003 16:16


Stack overflow / Speichermangel abfangen ?
 
Hi @all

Vieleicht kann mir da jemand weiter helfen und mir vieleicht nen konkretes Konzept zeigen wie ich folgende Fehler verhindere....

Ich habe eine Unit geschrieben in der ich eine Class definiert habe,
diese Class verfüght über einen eigenen Creat Construktor. Diesem übergebe ich eine Anzahl von Feldern (int) die er dann erzeugt und über zeiger verbindet (eine Art Matrix).

Jetzt habe ich das Problem das ich beim Aufruf des Construktors in einer Anderen Unit, bei einer zu hohen Anzahl von Felder einen Stack overflow bekomme ( was auch klar ist, denn der Construktor baut die Matrix Struktur rekusiv auf). Wo sollte und kann man den Fehler am besten abfangen ?? Mit nem try...except statemant ?? und das beim Aufruf des construktors ?? Außerdem muß ich noch den Fehler abfangen, wenn nicht genug speicherplatz zum erzeugen der matrix zur verfügung steht !?!

Hat da jemand ne Idee ???


Schon mal vielen dank im vorraus..... ;-)

MfG Andy

Christian Seehase 26. Jul 2003 16:35

Re: Stack overflow / Speichermangel abfangen ?
 
Moin Andy,

in der Theorie kann Dein Prozess maximal 2GB Speicher (real+virtuell) verwenden, dazu gehöret u.a. allerdings auch das Programm.
Ich vermute mal, dass Du anhand der Parameter wohl wirst welchen Speicherbedarf die Matrix haben wird, so dass Du den die Werte von vorn herein wirst einschränken können.

Die Exception deutet auf einen Fehler in der Rekursion hin, denn ein Stack Overflow tritt bei einer Rekursion eigentlich nur dann auf, wenn die Rekursionstiefe zu gross wird.
Beispiel: Wenn Du durch einen Verzeichnisbaum gehst, entspricht die Rekursionstiefe der Anzahl der Verzeichnisebenen.

Ein wenig Code wäre hilfreich.

Chewie 26. Jul 2003 16:36

Re: Stack overflow / Speichermangel abfangen ?
 
Na ja, du könntest den Fehler natürlich abfangen, aber wenn er öfters auftritt, wäre es wohl besser, den Algorithmus iterativ aufzubauen.

Shadow 26. Jul 2003 23:19

Re: Stack overflow / Speichermangel abfangen ?
 
danke für die schnellen Antworten.....

die rekusion ist fehlerfrei... der fehler tritt dann auf wenn der benutzer eine z.B. 10000 x 10000 große matrix erstellen will... was auch klar ist. Da eine solche Tiefe der Rekusion selbstverständlich eine Exception aus, da der stack überläuft.

Die frage ist nur ob die beste art diese Exception abzufangen ein try... except baum ist ?!

Christian Seehase 26. Jul 2003 23:32

Re: Stack overflow / Speichermangel abfangen ?
 
Moin Andy,

ich würde mal sagen, dass dann der erste Fall eintritt:
Du musst die Eingabe auf ein zulässiges Mass begrenzen, wobei es keine Rolle spielt, ob Du vorher den Stack vergrössert hast oder nicht. Irgendwann ist nun einmal Schluss. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 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