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 (https://www.delphipraxis.net/59335-stack-overflow.html)

RobinHood 20. Dez 2005 21:05


Stack Overflow
 
Hallo,

ich bekomme bei folgender Funktion einen StackOverflow:
Delphi-Quellcode:
function kunde_nach_nummer(kunden : tKunden;max_index : integer; pkundennummer : string): integer;
var i : integer;
begin
  i := 0;
  repeat
    inc(i);
  until ((kunden[i].kundennummer = pkundennummer) or (i >= max_index));

  if kunden[i].kundennummer = pkundennummer then
    result := i
  else
    result := 0;
end;
nach dem StackOverflow steht der Cursor auf dem "begin", aber warum?
der Aufruf der Funktion sieht folgendermaßen aus:
Delphi-Quellcode:
index := kunde_nach_nummer(kunden,max_index,kundennummer);
was vielleicht auch noch wissenswert wäre:
Delphi-Quellcode:
type tKunde = record
                kundennummer : string[50];
                anrede : string[50];
                name1 : string[50];
                name2 : string[50];
                strasse : string[50];
                plz : string[50];
                ort : string[50];
                wochentag : string[2];
              end;
     tKunden = array[1..10000] of tKunde;
Wäre nett wenn mir jemand sagen könnte warum diese Fehlermeldung kommt und warum der Cursor gerade bei dem "begin" stehen bleibt.
Danke schonmal im Vorraus!!!

MfG Marc

jim_raynor 20. Dez 2005 21:21

Re: Stack Overflow
 
Ich würde sagen, dein Array ist zu groß und passt nicht auf den Stack. Ich würde dir empfehlen das Array als Hier im Forum suchendynamisches Array zu machen. Dann wird es nicht auf dem Stack abgelegt, dein Programm geht wesentlich flotter, da nicht ständig das gesamte Array kopiert wird und du sparst eine Menge Arbeitsspeicher ;)

Alternativ kannst du glaube auch einfach kunden als const übergeben, dann wird auch nur eine Referenz übergeben.

Delphi-Quellcode:
function kunde_nach_nummer(const kunden : tKunden;max_index : integer; pkundennummer : string): integer;
Aber besser ist es, auf ein dynamisches Array umzusteigen.

P.S: Dein Array ist über 3MB groß und als statisches Array wird es bei jedem Funktionsaufruf auf den Stack kopiert.

RobinHood 20. Dez 2005 21:42

Re: Stack Overflow
 
Vielen Dank für deine Hilfe ich hab mich für die Lösung mit "const" entschieden :-D


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