Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#9

AW: Variable ist möglicherweise nicht initialisiert worden

  Alt 22. Feb 2012, 14:09
* Result ist irgendwie verständlicher, als soein Funktionsname. (vorallem kann man da auch Lesend drauf zugreifen)
* booked vor dem New setzen, da es bei OutOfMemory nie hinzugezählt würde, aber im Except wir immer abgezogen.
Delphi-Quellcode:
function AddSpark(aData : TSpark) : EList;
var
  help : PSparkList;
begin
  help := nil;
  try
    Inc(booked);
    New(help);
    help^.Data := aData;
    help^.pNext := pRoot;
    pRoot := help;
    Result := LOK;
  except
    on EOutOfMemory do
      Result := LNoMemory
    else
      Result := LUndefined;
    if Assigned(help) then
    begin
      Dec(booked);
      Dispose(help);
    end;
  end;
end;
Aber im Prinzip seh ich hier nur eine Exceptionquelle.
Das Andere sind wohl alles nur "harmlose" Typen/Variablen.
Delphi-Quellcode:
function AddSpark(aData : TSpark) : EList;
var
  help : PSparkList;
begin
  try
    New(help);
    Inc(booked);
    help^.Data := aData;
    help^.pNext := pRoot;
    pRoot := help;
    Result := LOK;
  except
    Result := LNoMemory;
  end;
end;

// oder von mir aus auch so

function AddSpark(aData : TSpark) : EList;
var
  help : PSparkList;
begin
  try
    New(help);
  except
    Exit(LNoMemory); // Result := LNoMemory; Exit;
  end;
  Inc(booked);
  help^.Data := aData;
  help^.pNext := pRoot;
  pRoot := help;
  Result := LOK;
end;
Standardmäßig braucht man bei help^.Data nicht manuell dereferenzieren. (Delphi macht es bei help.Data von alleine)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Feb 2012 um 14:14 Uhr)
  Mit Zitat antworten Zitat