Einzelnen Beitrag anzeigen

atc

Registriert seit: 3. Dez 2010
17 Beiträge
 
#1

Ist folgender Code "sicher"?

  Alt 28. Nov 2012, 16:20
Delphi-Version: XE2
Hallo,

ich mache gerade etwas mit Zeigern und frage mich ob folgender Code so OK ist?

Delphi-Quellcode:
type
  TRec = record
    S: string;
    A: array of string;
  end;
  PRec = ^TRec;

var
  P1: PRec;
  P2: Pointer;
  I : Integer;
begin
  Writeln(SizeOf(TRec));

  New(P1);
  P1^.S := 'test';
  SetLength(P1^.A, 0);

  P2 := P1;

  for I := 1 to 10 do
    with PRec(P2)^ do
    begin
      S := S + 'a';
      SetLength(A, Succ(Length(A)));
      A[High(A)] := 'test' + IntToStr(Length(A));
    end;

  with PRec(P2)^ do
  begin
    Writeln(PRec(P2)^.S);
    for I := Low(A) to High(A) do
      Writeln(A[I]);
  end;

  Readln;
end.
Mit New() wird ja, glaube ich, nur Speicher für 2 Zeiger angelegt und nicht für beliebig lange Strings, oder?
Ist es dann OK den String und das Array wie oben zu verändern/vergrößern oder kann es da "knallen"? Also wird automatisch neuer Speicher angefordert?

Eine andere Frage ist, ob es einen Unterschied macht, wenn ich PRec(P2)^.S oder TRec(P2^).S schreibe?

Danke für jede Antwort
  Mit Zitat antworten Zitat