Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   FreePascal Speicher Freigeben (https://www.delphipraxis.net/163458-speicher-freigeben.html)

DeddyH 30. Sep 2011 16:33

AW: Speicher Freigeben
 
Das stimmt zwar, aber ich halte die gezeigte Vorgehensweise sowieso zumindest für problematisch. Schaut man sich dosomething alleine an, dann ist man doch erst einmal verwirrt.

p80286 30. Sep 2011 17:14

AW: Speicher Freigeben
 
Das würde ich unter tricky noch akzeptieren, ich käme hier ins Grübeln:
Delphi-Quellcode:
function ExtraColumsStringsDB(firma:string; ASL: TStringlist): Boolean;
......
    ASL := TStringList.Create;
das mag zwar gehen, aber wenn man mal die Übersicht verliert...

Gruß
K-H

DeddyH 30. Sep 2011 17:25

AW: Speicher Freigeben
 
Naja, eine lokale Instanzvariable, die nirgends erzeugt, aber dann freigegeben wird... Da würde ich zunächst mit einer AV rechnen.

Luckie 30. Sep 2011 17:48

AW: Speicher Freigeben
 
na ja, übersichtlich ist anders. Wenn man konsequent den Spiecher auch da wieder frei gibt, wo er reserviert wird, dann läuft man auch nicht in Gefahr den Überblick zu verlieren.

DeddyH 30. Sep 2011 18:01

AW: Speicher Freigeben
 
Japp. Aus dem Bauch heraus würde ich es ungefähr so machen:
Delphi-Quellcode:
function ExtraColumsStringsDB(const firma: string; ASL: TStrings): Boolean;
var
  Temp: Array Of TColumn;
  i: integer;
begin
  Result := False;
  Assert(Assigned(ASL));
  try
    ASL.Clear;
    //das sieht mir komisch aus, ist das auch so ein Kandidat?
    Temp := GetExtraFields(firma);
    for i:=0 to high(Temp) do
    begin
      ASL.Add(Temp[i].FieldName );
    end;
    Result := True;
  except
    on E: Execption do
      //irgendwie reagieren
  end;
end;

procedure dosomething;
var
  SL: TStringList;
begin
  SL := TStringlist.Create;
  try
    ExtraColumsStringsDB('EINEFIRMA', SL);
    //noch irgendetwas mit SL anstellen
  finally
    SL.Free;
  end;
end;

r2c2 30. Sep 2011 19:03

AW: Speicher Freigeben
 
Gibt es irgend einen Grund für das try..except in ExtraColumsStringsDB? Wenn mand ie Exception nicht behandeln kann, dann sollte die auch nicht behandelt werden und erst in einer höheren Schicht taucht dann das try..except auf. Dann kann man sich auch den überflüssigen Boolean-Rückgabewert sparen.

mfg

Christian

himitsu 30. Sep 2011 19:13

AW: Speicher Freigeben
 
Zitat:

Delphi-Quellcode:
//das sieht mir komisch aus, ist das auch so ein Kandidat?

Da sich hier Delphi um die Initialisierung und Feigabe des Arrays kümmert, ist das nicht wirklich problematisch.

Interfaces, dynamische Arrays und Strings kann man daher ganz gut als Result verwenden.


Einfache Typen, Records, statische Arrays und natürlich eine Kombination aus all Diesen sind natürlich auch möglich.

DeddyH 1. Okt 2011 10:34

AW: Speicher Freigeben
 
Da die Elemente aber anscheinend eine Eigenschaft Fieldname haben, wird es sich wohl um Records oder Objekte handeln. Und Objekte werden in dem Code ja nicht freigegeben, daher meine Frage.

himitsu 1. Okt 2011 13:40

AW: Speicher Freigeben
 
Von Objekten hab ich auch nichts gesagt :mrgreen:

Records in Arrays wären aber OK :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 Uhr.
Seite 3 von 3     123   

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