Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   new(...) bei PAnsiChar? (https://www.delphipraxis.net/174882-new-bei-pansichar.html)

Gargamel 16. Mai 2013 06:37

new(...) bei PAnsiChar?
 
Hi

Wenn ich eine Variable vom Typ PAnsiChar habe, spielt es anscheinend keine Rolle, ob ich diese mit new(variable) versehe oder nicht. Bei einem Record aber schon. Wieso ist das so?

Hier der Quellcode:

Delphi-Quellcode:
type
  TForm2 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

  TDaten = record
    name:string;
  end;
  PDaten = ^TDaten;

var
  Form2: TForm2;
  daten:array of PDaten;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var text_s:string;
    text_p:PAnsiChar;
begin
  text_s:='Irgendwas';
  new(text_p); // sinnvoll oder nicht?
  text_p:=PAnsiChar(AnsiString(text_s));

  setLength(daten,1);
  new(daten[0]);
  daten[0].name:='Trallala';

  Form2.Caption:=WideString(text_p); // nur zum prüfen
end;

mkinzler 16. Mai 2013 06:56

AW: new(...) bei PAnsiChar?
 
Nein. Ein Pchar ist ein Zeiger, der auf einen String zeigt. Du forderst mit dem new einen Speicherbereich von einen Char an ( 2 Byte) verwendest den Speicher aber nicht, weil der Zeiger anschliessend ja auf eine andere Speicheradresse umgebogen wird ( Adresse der Stringvariable).
Der ursprünglich angeforderte Speicherbereich wird nie freigegeben.

Gargamel 16. Mai 2013 06:59

AW: new(...) bei PAnsiChar?
 
Ah ok, vielen Dank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz