Hallo, die Procedure iTest2 Funktioniert deshalb nicht, weil sie eine Variable vom Type TiVec erwartet.
Es darf keine Konstante uebergeben werden da der Speicherplatz dafuer nur beim Aufruf der Procedure
auf dem Stack existiert. Wird die Procedure wieder verlasen, sind die Daten wieder weg, genau das
passiert bei der Prozedure iTest1.
Um die Procedure iTest2 zum laufen zu bringen must Du zuerst eine Variable vom Type TiVec erzeugen,
Speicherplatz reservieren und dann initialisieren.
Dein Beispielcode wuerde dann etwa so aussehen:
Code: Alles auswählen
program TestVec;
type
TiVec = array of Integer;
procedure iTest1(v: array of Integer);
begin
WriteLn(v[0]);
end;
procedure iTest2(v: TiVec);
var Inx: Integer;
begin
for Inx:= 0 to High(v) do
Write(v[Inx], ' ');
WriteLn;
end;
var
iVec: TiVec;
begin
SetLength(iVec, 3);
iVec[0]:= 1;
iVec[1]:= 2;
iVec[2]:= 3;
iTest1([1, 2, 3]); //Die werte existieren nur auf dem Stack
iTest1(iVec); //Die werte im Array existieren auch nach dem Aufruf noch
iTest2(iVec); //Jetzt gehts
//Speicher wieder frei geben
SetLength(iVec, 0);
end.
mfg