Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Frage zu MAC Adresse auslesen

  Alt 9. Mai 2007, 09:41
liefert dir denn GetSystemMacAdresses wirklich 6 Adressen zurück oder liegt es vielleicht einfach nur daran das du deine schleife hart von 0 bis 5 durchlaufen lässt?

Im übrigen hast du dir da ein riesen Speicherleck geschaffen.
Durch den Aufruf von GetSystemMacAdresses wird eine Stringlist initialisiert welche dir zurück gegeben wird. Diese gibst du allerdings nirgends frei sondern rufst stattdessen die Funktion sogar 6 mal auf ohne einmal die zurückgegebene Stringlist frei zu geben. Eben um so etwas zu vermeiden werden funktionen die Listen füllen in der Regel so declariert.
function GetSystemMacAdresses(ADestList: TStringList): Irgendwas; somit ist der Nutzer gezwungen die Liste(das Object) vorher anzulegen und weiß damit auch sofort das er sich um die Freigabe auch selbst kümmern muss. Es hindert dich niemand dran als Ergebnis die Stringliste auch als Funktionsergebnis zurück zu geben aber du solltest in einer Funktion keine Stringliste erstellen und zurückgeben.
Delphi-Quellcode:
function GetSystemMacAdresses(ADestList: TStringList): TStringList;
begin
  [...]
  result := ADestList;
end;
Generell sollte man in Funktionen nie ein Object erstellen welches per Result zurück gegeben wird.
Denn der Endanwender weiß dann nicht ob er sich selbst um die Freigabe kümmern muss oder ob die Freigabe von der Klasse gemanged wird.
Zudem kommt es auch des öfteren vor das man eine Funktion aufruft ohne das Funktionsergebnis zu verwenden (denn nicht alle werten Funktionsergebnisse aus um heraus zu finden ob der Aufruf erfolgreich war etc.).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat