Thema: Delphi Speicherüberlauf?

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.106 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Speicherüberlauf?

  Alt 13. Mai 2008, 18:23
Moin Stamper,

also mir fallen da, auf Anhieb, ein paar unschöne Stellen auf

Erstens:

Delphi-Quellcode:
const
  FileAttr = faReadOnly+faHidden+faArchive;
Flags niemals mit + verknüpfen, sondern immer mit or.
Das hat hier zwar keine Auswirkungen, aber besser Du gewöhnst Dir das + gar nicht erst an (ich weiss, in der Delphi-Hilfe steht es auch mit +, aber dadurch wird's nicht besser )
Hintergrund:
Sollte bei verschiedenen Konstanten mal das gleiche Bit gesetzt sein, so erhält man bei +, unter Umständen, eine ungültige oder, schlimmer noch, unerwünschte Bitmaske. Bei or kann das nicht passieren.

Delphi-Quellcode:
const
  FileAttr = faReadOnly or faHidden or faArchive;
Zweitens:
Das hier:

if SFPath[Length(SFPath)]<>'\then SFPath := SFPath+'\'; kann schief gehen, wenn die Länge von SFPath gleich 0 ist.
Besser wäre die Verwendung von IncludeTrailingPathDelimiter oder IncludeTrailingBackslash.


Drittens:

Zumindest beim ersten erfolgreich ausgeführten FindFirst fehlt das zugehörige FindClose.
Ausserdem fehlen jeweils die Resourcenschutzblöcke (try/finally)

Delphi-Quellcode:
if FindFirst ... = 0 then begin
  try
  finally
    FindClose...
  end;
end;
Viertens:
Diese Prüfung:

(Search.name[1]<>'.') ist schlicht falsch, da Datei und Verzeichnisnamen mit einem Punkt beginnen dürfen.
Es müssen explizit die Namen . und .. geprüft werden.

(Search.Name <> '.') and (Search.Name <> '..')
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat