Ich weiß nicht, ob das dein Problem ist, aber bei dynamischen Arrays als Rückgabewerten muss man beachten, dass sie eher als var-Parameter implementiert sind. Z.B. liefert folgendes Progrämmchen
Delphi-Quellcode:
program DynArrayReturn;
{$APPTYPE CONSOLE}
uses
Types,
SysUtils;
function MakeArrayRet(ASize: Integer): TIntegerDynArray;
begin
Write(Length(Result): 3);
SetLength(Result, ASize);
end;
procedure MakeArrayVar(
var AArray: TIntegerDynArray; ASize: Integer);
begin
Write(Length(AArray): 3);
SetLength(AArray, ASize);
end;
procedure MakeArrayOut(
out AArray: TIntegerDynArray; ASize: Integer);
begin
Write(Length(AArray): 3);
SetLength(AArray, ASize);
end;
procedure Test;
var
a: TIntegerDynArray;
begin
Write('
Return:');
a :=
nil;
a := MakeArrayRet(10);
a := MakeArrayRet(5);
Writeln;
Write('
var: ');
a :=
nil;
MakeArrayVar(a, 10);
MakeArrayVar(a, 5);
Writeln;
Write('
out: ');
a :=
nil;
MakeArrayOut(a, 10);
MakeArrayOut(a, 5);
Writeln;
end;
begin
try
Test;
Readln;
except
on E:
Exception do
Writeln(E.Classname, '
: ', E.
Message);
end;
end.
bei mir
Code:
Return: 0 10
var: 0 10
out: 0 0
DynArray-Rückgabewerte werden also
nicht korrekt initialisiert!