AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamische Arrays freigeben (Delphi2010)

Ein Thema von kaju74 · begonnen am 10. Mär 2010 · letzter Beitrag vom 10. Mär 2010
Antwort Antwort
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#1

Dynamische Arrays freigeben (Delphi2010)

  Alt 10. Mär 2010, 14:16
Hallo.

Ich habe mal eine Frage zum Freigeben zuvor allokierten Speichers bzgl. dynamischen Arrays unter Delphi2010.

Gegeben sei folgender Konstrukt:

Delphi-Quellcode:
TNXXmlSearchResult = record
  private
    FElement: TNXXmlElement;
    FAttribute: TNXXmlAttribute;
    FIndex: Integer;
    function GetName: string;
  public
    function AsString(const Default: string = ''): string;
    function AsInteger(const Default: Integer = 0): Integer;
    function AsFloat(const Default: Extended = 0.00): Extended;
    property Attribute: TNXXmlAttribute read FAttribute write FAttribute;
    property Element: TNXXmlElement read FElement write FElement;
    property Name: string read GetName;
    property Index: Integer read FIndex;
  end;

  TNXXmlSearchResults = array of TNXXmlSearchResult;
Ferner gibt es eine Funkion (in NXXmlDocument) zum Suchen von einzelnen Xml-Elementen:

function Search(const XPath: string): TNXXmlSearchResults; Diese Funktion hat in etwa folgenden Aufbau:

Delphi-Quellcode:
  ....Aufbau der Suchergebnisse in einer Liste (Hits)...

  SetLength(Result, Hits.Count);
  for i := 0 to Hits.Count - 1 do
    with PHitItem(Hits[i])^ do
    begin
      Result[i].Element := Element;
      Result[i].Attribute := Attribute;
      Result[i].FIndex := i;
    end;
Soweit so gut. Nun kann ich die Funktion ja wie folgt aufrufen:

Delphi-Quellcode:
var
  XmlResults: TNXXmlResults;
  SearchResult: TNXXmlSearchResult;
begin
  XmlResults := NXXmlDocument.Search('/books/*/records');
  try
    for SearchResult in XmlResults do
      { do anything with SearchResult... }
  finally
    XmlResult := nil;
  end;
end;
Laut Delphi Hilfe gibt man ein dynamisches Array frei, indem man diesem NIL zuweißt. Was aber passiert bei folgendem
Konstrukt, das man sehr häufig antrifft:

Delphi-Quellcode:
var
  SearchResult: TNXXmlSearchResult;
begin
  for SearchResult in NXXmlDocument.Search('/books/*/records') do
    { do anything with SearchResult... }
end;
Wie und wo und wird überhaupt der Speicher hier freigegeben?

Danke & Gruß,
- kaju
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#2

Re: Dynamische Arrays freigeben (Delphi2010)

  Alt 10. Mär 2010, 15:30
Der Compiler fügt automatisch Code für Array-, String- und Interface-Variable hinzu.
Am Anfang der Gültigkeit (hier der Prozedur) werden diese mit Nil bzw. Leer initialisiert und zum Schluss entsprechend freigegeben.
Lokale Variablen sind nur bis zum Ende der Prozedur gültig, die Zuweisung von Nil ist deshalb hier überflüssig.
  Mit Zitat antworten Zitat
kaju74

Registriert seit: 22. Okt 2003
185 Beiträge
 
#3

Re: Dynamische Arrays freigeben (Delphi2010)

  Alt 10. Mär 2010, 15:51
Hallo.

Danke...wieder wad gelernt...)) Bei "normalen" Variablen war mir das bewusst, bei dynamischen
Arrays aber nicht so.

Gruß,
- kaju
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:08 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