Einzelnen Beitrag anzeigen

Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.734 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Risiko dyn.array als Funktionsrückgabewert ???

  Alt 8. Mär 2012, 16:31
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!
Uli Gerhardt
  Mit Zitat antworten Zitat