14 פיט - יפלד
ישאר דומע | םיפיטה דומע רנק ודיע תאמ

...הצירה ןמזב ךרעמה לדוג תא תונשל רשפא ,C++-ו C-ב ומכ קיסיבב ,עודיכ
? (ללכב יפלדו) לקספ תפשב הז תא השוע ינא ךיא

:הליעי לבא ,"תכלכולמ" דואמ הרוצב הז תא תושעל רשפא יפלדב ,ןכבו

יפלדל םיפיט לע דנלרוב לש רתאהמ חוקל אבה דוקה*
Type
  TSomeArrayElement = integer;
  PSomeArray = ^TSomeArray;
  TSomeArray = array[0..0] of TSomeArrayElement;

procedure CreateArray(var TheArray : PSomeArray;
                      NumElements : longint);
begin
  GetMem(TheArray, sizeof(TSomeArrayElement) * NumElements);
end;

procedure FreeArray(var TheArray : PSomeArray;
                    NumElements : longint);
begin
  FreeMem(TheArray, sizeof(TSomeArrayElement) * NumElements);
end;

procedure ReSizeArray(var TheArray : PSomeArray;
                      OldNumElements : longint;
                      NewNumElements : longint);
var
  TheNewArray : PSomeArray;
begin
  GetMem(TheNewArray, sizeof(TSomeArrayElement) * NewNumElements);
  if NewNumElements > OldNumElements then
    Move(TheArray^,
         TheNewArray^,
         OldNumElements * sizeof(TSomeArrayElement)) else
    Move(TheArray^,
         TheNewArray^,
         NewNumElements * sizeof(TSomeArrayElement));
  FreeMem(TheArray, sizeof(TSomeArrayElement) * OldNumElements);
  TheArray := TheNewArray;
end;


{This procedure demonstrate how to resize the Array in
      a push of a button :-) }
procedure TForm1.Button1Click(Sender: TObject);
var
  p : PSomeArray;
  i : integer;
begin
{$IFOPT R+}
  {$DEFINE CKRANGE}
  {$R-}
{$ENDIF}

  CreateArray(p, 200);
  for i := 0 to 199 do
    p^[i] := i;
  ResizeArray(p, 200, 400);
  for i := 0 to 399 do
    p^[i] := i;
  ResizeArray(p, 400, 50);
  for i := 0 to 49 do
    p^[i] := i;
  FreeArray(p, 50);

{$IFDEF CKRANGE}
  {$UNDEF CKRANGE}
  {$R+}
{$ENDIF}
end;