AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Stack overflow / Speichermangel abfangen ?
Thema durchsuchen
Ansicht
Themen-Optionen

Stack overflow / Speichermangel abfangen ?

Ein Thema von Shadow · begonnen am 26. Jul 2003 · letzter Beitrag vom 27. Jul 2003
Antwort Antwort
Shadow
(Gast)

n/a Beiträge
 
#1

Stack overflow / Speichermangel abfangen ?

  Alt 26. Jul 2003, 17:16
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
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Stack overflow / Speichermangel abfangen ?

  Alt 26. Jul 2003, 17:35
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.
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
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Stack overflow / Speichermangel abfangen ?

  Alt 26. Jul 2003, 17:36
Na ja, du könntest den Fehler natürlich abfangen, aber wenn er öfters auftritt, wäre es wohl besser, den Algorithmus iterativ aufzubauen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Shadow
(Gast)

n/a Beiträge
 
#4

Re: Stack overflow / Speichermangel abfangen ?

  Alt 27. Jul 2003, 00:19
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 ?!
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

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

Re: Stack overflow / Speichermangel abfangen ?

  Alt 27. Jul 2003, 00:32
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.
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
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 07:00 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