Einzelnen Beitrag anzeigen

blackfin
(Gast)

n/a Beiträge
 
#2

AW: Fehlermeldung korrekt ausgeben

  Alt 15. Jun 2011, 10:37
Die Zugriffsverletzung, die du beschreibst, kommt nicht vom ersten Fehler innerhalb des except-Blocks, sondern vom Freigeben des nicht erzeugten Objekts danach!
Erklärung:
Die Statements im finally-Block werden immer ausgeführt, also auch dann, wenn dein create() fehlschlägt.
Somit knallt es dann auch dort nochmal, weil dein "o"-Objekt an der Stelle nicht erzeugt wurde, du es aber freigeben willst.

Also entweder so:
Delphi-Quellcode:
var
  o : TObject;
begin
try
  try
    o := TObject.Create;
    FreeAndNil(o);
  except
    ShowMessage('error');
  end;
end;
oder so:
Delphi-Quellcode:
   
var
  o : TObject;
begin
try
  try
    o := TObject.Create;
  except
    ShowMessage('error');
  end;
finally
  if assigned(o) then FreeAndNil(o);
end;
oder mit ausführlicher Fehlermeldung:
Delphi-Quellcode:
var
  o : TObject;
begin
try
  try
    o := TObject.Create;
  except
    on E : Exception do
      ShowMessage('Error ['+ E.ClassName+']: '+ E.Message);
  end;
finally
  if assigned(o) then FreeAndNil(o);
end;

Geändert von blackfin (15. Jun 2011 um 10:48 Uhr)
  Mit Zitat antworten Zitat