Autor Beitrag
Mortal-Shadow
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Di 09.09.08 15:20 
Hi,
ich brauche in meiner Prozedur einen Array.
Dessen Größe wird aber erst vor dem jeweiligen Aufruf der Prozedur bekannt.
Ich hatte gehofft das etwas in der Art funktionieren würde:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.myprocedure(const Arraygroesse: Integer);
var
myarray: Array[1..Arraygroesse] of Integer;
{....}

Leider lässt der Compiler das nicht zu. (Warum eigentlich nicht - er muss doch mit jedem Aufruf nur einen konstanten Bereich reservieren.)
Gibt es noch eine andere möglichkeit außer das ganze
a) per Stringlist ( .add in einer Schleife bis groß genug und dann per Strtoint() und inttostr() damit arbeiten)
b) per sehr großem Array, der halt unnötig Platz verbraucht, falls die Prozedur nur wenig Zahlen speichern muss.

zu tun?
Gruß, MS


Moderiert von user profile iconNarses: Topic aus Dateizugriff verschoben am Di 09.09.2008 um 15:49
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 09.09.08 15:27 
das was du suchst nenntsich dynamisches Array. Hier gibts ein kapitel darüber.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Di 09.09.08 16:31 
oder mit pointern
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Di 09.09.08 16:47 
user profile iconMortal-Shadow hat folgendes geschrieben:
[..] Leider lässt der Compiler das nicht zu. (Warum eigentlich nicht - er muss doch mit jedem Aufruf nur einen konstanten Bereich reservieren.) [..]

Das Stichwort hast du selber schon gegeben mit "konstanter Bereich". Beim Kompilieren von statischen arrays ist die Größe in deiner Executable -wie der Name schon sagt- statisch festgelegt und nicht mehr variabel. Das ist halt so! Wenn du dynamische arrays benutzen willst, folge dem Link von user profile iconelundril. FORTRAN™ kann Speicher gar nicht dynamisch anfordern. Da musst du vor dem Kompilieren wissen, wie groß deine Felder sein werden. Btw.: Das geht AFAIK:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
const
  ARRAYGROESSE = 40;

[..]

procedure TForm1.MyProcedure;
var
  MyArray: array [1..ARRAYGROESSE] of integer;


Moderiert von user profile iconCalculon: Topic für kritisch mit bedenklichem Inhalt befunden am Di 09.09.2008 um 16:46
:lol: Toll! Ich habe einen neuen Tag gelernt! Damit lässt sich bestimmt viel Unfug anrichten. Nein liebe Mods mach' ich natürlich nicht!!

_________________
Hallo Mutti
Mortal-Shadow Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 110



BeitragVerfasst: Di 09.09.08 20:49 
Dynamischer Array klingt doch gut.
Vielen Dank.