Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stack Überlauf in der IDE (https://www.delphipraxis.net/108238-stack-ueberlauf-der-ide.html)

little_budda 9. Feb 2008 15:48


Stack Überlauf in der IDE
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

ich verwende folgende Prozedur unter D5 Pro.
Delphi-Quellcode:
procedure Tfrm_main.Vergleichstarten1Click(Sender: TObject);
const xlCellTypeLastCell = $0000000B;
var XlApp1, XlSheet1: OLEVariant;
    iLastRow1, iLastCol1: integer;
    iLastRow2, iLastCol2: integer;
    iAnzahlBlaetter1 : integer;
    iAnzahlBlaetter2 : integer;
    iSheetIndex, iColIndex, iRowIndex : integer;
    iAktRow3 : integer;
    workBook1 : array [1..50, 1..50, 0..100] of string[50]; // Sheet, Col, Row.
    workBook2 : array [1..50, 1..50, 0..100] of string[50]; // Sheet, Col, Row.
    sStrValue1, sStrValue2 : string;
begin
  if ((sBaseFile1 = '') or (sBaseFile2 = '') or (sBaseFile3 = '')) then
    begin
      MessageDlg('Ein oder mehrere Tabellen wurden nicht angegeben.', mtError, [mbOk], 0);
      exit;
    end;
 ...
Sobald in die Prozedur gesprungen wird bleibt die IDE auf der ersten Zeile hängen und meldet Stack-Überlauf.
Ich habe das CPU Fenste mal angehangen.

Hat jemand eine Idee für mich?

:gruebel:

Dax 9. Feb 2008 15:51

Re: Stack Überlauf in der IDE
 
Bedenke, dass alle lokalen Variablen auf dem Stack liegen. Jedes deiner Arrays verbraucht 50 * 50 * 101 * 51 Byte speicher, und das ist sehr viel ;) Insgesamt wären das etwa 25MB Stackspeicher.. Der Standard ist glaub ich 4MB.

little_budda 9. Feb 2008 15:53

Re: Stack Überlauf in der IDE
 
Danke für den Tipp.
Als globale Variable klappt es.

Dax 9. Feb 2008 15:58

Re: Stack Überlauf in der IDE
 
Mit dynamischen Arrays würde es auch funktionieren.

little_budda 11. Feb 2008 05:38

Re: Stack Überlauf in der IDE
 
Mit dynamischen Arrays würde es mir auch besser gefallen.
Aber ich bekomme die Größe von mehrdimensionalen Array nicht gesetzt.

:wall:

Muetze1 11. Feb 2008 14:18

Re: Stack Überlauf in der IDE
 
Delphi-Quellcode:
SetLength(workBook1, 50, 50, 101);
SetLength(workBook2, 50, 50, 101);
Einziger Unterschied: dynamische Arrays fangen immer bei 0 an, somit müssten Zugriffe auf deine ersten beiden Dimensionen nun ein -1 bekommen, da es dort nur noch von 0 bis 49 geht.


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