AGB  ·  Datenschutz  ·  Impressum  







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

Stack Overflow

Ein Thema von RobinHood · begonnen am 20. Dez 2005 · letzter Beitrag vom 20. Dez 2005
Antwort Antwort
RobinHood

Registriert seit: 5. Jun 2005
16 Beiträge
 
#1

Stack Overflow

  Alt 20. Dez 2005, 22:05
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:
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
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#2

Re: Stack Overflow

  Alt 20. Dez 2005, 22:21
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.

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.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
RobinHood

Registriert seit: 5. Jun 2005
16 Beiträge
 
#3

Re: Stack Overflow

  Alt 20. Dez 2005, 22:42
Vielen Dank für deine Hilfe ich hab mich für die Lösung mit "const" entschieden
  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 23:24 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