Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 2 dimensionales dynamisches array (https://www.delphipraxis.net/78226-2-dimensionales-dynamisches-array.html)

mmk369 1. Okt 2006 11:19


2 dimensionales dynamisches array
 
Erst mal hallo , bin zwar neu hier, hab aber schon viele Beiträge hier gelesen.

Nun zu meinem Problem...
Mein Code :

Delphi-Quellcode:
type
 TARR_Class = record
              Obj : TLabel;
              CL : string;
 end;

 ...

var
 ARR_Class : array of array of TARR_Class;

 ...

if CLExists = -1 then
    begin            
     Max_X :=  length (ARR_Class);
     setlength (ARR_Class, MAX_X+1 );
     setlength (ARR_Class[Max_X],1 );
    end
   else
    begin
      Max_X :=  length (ARR_Class);             //Hier meldet der debugger einer EAccessViolation
      Max_Y :=  length (ARR_Class[MAX_X]);
      setlength (ARR_Class[CLExists], Max_Y+1);
    end;
   ARR_Class [Max_X, MAX_Y-1].CL := FORMAT;
   ARR_Class [Max_X, MAX_Y-1].obj := lblText;
 end;

 ...
Es ist bestimmt nur ne Kleinigkeit die ich übersehen hab, hoff ich mal :roll:

Danke im voraus

marabu 1. Okt 2006 11:40

Re: 2 dimensionales dynamisches array
 
Herzlich willkommen in der Delphi-PRAXiS, mmk369.

Ich will garnicht glauben, dass an der von dir bezeichneten Stelle eine AV auftritt. Aber warum führst du MAX_X und MAX_Y nach, wenn du doch jederzeit mit High(ARR_Class) auf das letzte Item zugreifen kannst?

Freundliche Grüße vom marabu

mmk369 1. Okt 2006 11:47

Re: 2 dimensionales dynamisches array
 
Ja richtig eigentlich müsste ich das ja nicht machen mit dem MAX_X un MAX_Y, aber das ist doch bestimmt nicht die Lösung des Problems oder doch ? Jedenfalls was die Fehlermeldung angeht, denke das es dann in der vorherigen Zeile passiert ist
Delphi-Quellcode:
setlength (ARR_Class[Max_X],1 );
Bin mit diesem "Stepmodus" noch nicht so vertraut...

gruss

marabu 1. Okt 2006 11:54

Re: 2 dimensionales dynamisches array
 
Aber sicher ist das der Fehler gewesen, denn du hast ja in einem vorherigen Durchlauf MAX_X auf einen um 1 zu hohen Wert gesetzt, indem du Length(ARR_Class) zugewiesen hast - der höchste Index ist nun einmal Pred(Length(ARR_Class)) oder gleich High(ARR:Class).

marabu

mmk369 1. Okt 2006 12:14

Re: 2 dimensionales dynamisches array
 
Also hab jetz alle Max_X mit hight(ARR_Class) ersetzt, das problem tritt trotzdem immer dann wieder auf, wenn ich die 2te Dimension um 1 erweitern will "setlength (ARR_Class [high (ARR_Class)],1 );" hab noch eine if schleife dazu gemacht falls am anfang das high(ARR_Class) -1 ist, dann wird die länge des arrays einfach auf 1 gesetzt, denn -1 + 1 ist ja 0, denn sonst würd ich ja beim ersten mal wo ich das array erweitere die länge 0 zuweisen...

gruss

mmk369 1. Okt 2006 13:57

Re: 2 dimensionales dynamisches array
 
Habs schlussendlich doch noch hingekriegt :thumb: :lol:
Vielen Dank aber auch !

gruss

gordon freeman 1. Okt 2006 14:33

Re: 2 dimensionales dynamisches array
 
Hi mmk369,

könntest du bitte die Lösung deines Problems noch posten. Für alle Leute, die die Suche benutzen und ein ähnliches Problem haben ist es nicht gerade sinnvoll, wenn sie nur wissen, dass du das Problem gelöst hast. Schreib einfach noch kurz, wo der Fehler war und wie du ihn behoben hast.

mfg, Martin

mmk369 7. Okt 2006 09:58

Re: 2 dimensionales dynamisches array
 
Sorry das es so lange gedauert hat, hatte ich vergessen die Lösung hinzuschreiben. ALso das Problem war tatsächlich das, dass ich durch "length" halt einen zu weit vorn war, mit "high" wird ja bei -1 angefangen und bei length mit 0. Dadurch wurde versucht auf eine Stelle im Array zuzugreifen wo es noch gar kein Eintrag gibt.

Gruss


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