AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Abstrakter Fehler oO

Ein Thema von Green · begonnen am 17. Sep 2006 · letzter Beitrag vom 17. Sep 2006
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#21

Re: Abstrakter Fehler oO

  Alt 17. Sep 2006, 22:54
Zitat von Luckie:
Delphi-Quellcode:
function GetId(const f: string; const i: integer): string;
var temp: String; sl: TStrings;
begin
  temp := '';
  sl := TStringList.Create;
  try
    sl.LoadFromFile(f);
    temp := Copy(sl[0], i*6, 5);
  finally
    result := temp;
    FreeAndNil(sl);
  end;
end;
So sollte es gehen.
Genau so ist es nicht mehr garantiert *g* Wenn die Stringlist warum auch immer nicht erzeugt ist, befindet man sich noch nicht im gesicherten Bereich, und kommt dann auch nicht in dieses finally. (Zugegeben, habe ich das allerdings noch nicht erlebt, dass eine Stringlist sich nicht erzeugen lies)
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#22

Re: Abstrakter Fehler oO

  Alt 17. Sep 2006, 22:55
Zitat von Matze:
Wann soll das fehlschlagen? Dann müsstest du ja vor jeder Zuweisung ein "try" setzen.
Es könnte nicht mehr genügend Speicher verfügbar sein, aber ist ja jetzt auch egal, durch die ganzen Edits ergibt das keinen Sinn mehr...

Aber ja, man könnte den Code von mir aus auch so machen, wie Luckie geschrieben hat.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Abstrakter Fehler oO

  Alt 17. Sep 2006, 22:55
Zitat von Luckie:
Delphi-Quellcode:
function GetId(const f: string; const i: integer): string;
var temp: String; sl: TStrings;
begin
  temp := '';
  sl := TStringList.Create;
  try
    sl.LoadFromFile(f);
    temp := Copy(sl[0], i*6, 5);
  finally
    result := temp;
    FreeAndNil(sl);
  end;
end;
So sollte es gehen.
warum steckt man die zuweisung von "result" mit ins finally. bzw. wozu überhaupt "finally" alles was immer ausgefüht werden soll kann man doch auch hinter den try-Block setzen und stattdessen ein try-Except block machen das nur bei einer Exception eine sonderbehandlung statt findet
Delphi-Quellcode:
function GetId(const f: string; const i: integer): string;
var temp: String; sl: TStrings;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile(f);
    temp := Copy(sl[0], i*6, 5);
  except
    temp := '';
  end;
  FreeAndNil(sl);
  result := temp;
end;
die variante mit finally kommt ja dieser gleich:
Delphi-Quellcode:
function GetId(const f: string; const i: integer): string;
var temp: String; sl: TStrings;
begin
  temp := '';
  sl := TStringList.Create;
  try
    sl.LoadFromFile(f);
    temp := Copy(sl[0], i*6, 5);
  except
  end;
  result := temp;
  FreeAndNil(sl);
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#24

Re: Abstrakter Fehler oO

  Alt 17. Sep 2006, 22:57
Zitat von GuenterS:
Genau so ist es nicht mehr garantiert *g* Wenn die Stringlist warum auch immer nicht erzeugt ist, befindet man sich noch nicht im gesicherten Bereich, und kommt dann auch nicht in dieses finally.
Das finally kommt genrell, nur würde es dann krachen. Aber ich habe noch nie gehört, dass eine StringList nicht erstellt werden würde.
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Abstrakter Fehler oO

  Alt 17. Sep 2006, 23:03
Zitat von Matze:
Zitat von GuenterS:
Genau so ist es nicht mehr garantiert *g* Wenn die Stringlist warum auch immer nicht erzeugt ist, befindet man sich noch nicht im gesicherten Bereich, und kommt dann auch nicht in dieses finally.
Das finally kommt genrell, nur würde es dann krachen. Aber ich habe noch nie gehört, dass eine StringList nicht erstellt werden würde.
Das stimmt so aber nicht.

Delphi-Quellcode:
procedure Test;
var
  i: integer;
  lList: TList;
begin
  i := 0;
  lList.Add(@i); // <-- Verhängnisvolle Zeile
  try
      ShowMessage('TEST');
  finally
      ShowMessage('FINALLY');
  end;
end;

Habe das gerade eben mal schnell mit TurboDelphi probiert, er kommt nicht zum ShowMessage('FINALLY');

Würde ich die verhängnissvolle Zeile innerhalb des Try Blockes machen schon.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: Abstrakter Fehler oO

  Alt 17. Sep 2006, 23:05
Ach so meinst du das. Stimmt, das hatte ich gar nicht bedacht. Aber in jedem Mustercode wird es ohne doppeltes "try" gelöst. Also kann da eigentlich auch nichts passieren.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#27

Re: Abstrakter Fehler oO

  Alt 17. Sep 2006, 23:10
Natürlich kommt er nur in's finally wenn es vor dem try nicht schon gekracht hat.
D.h. wenn in unserem obigen Beispiel das Erzeugen der StringList fehlschlägt (was eigentlich nicht vorkommen sollte), wird der finally-Teil auch nicht ausgeführt.

Zitat von Matze:
Ach so meinst du das. Stimmt, das hatte ich gar nicht bedacht. Aber in jedem Mustercode wird es ohne doppeltes "try" gelöst. Also kann da eigentlich auch nichts passieren.
Also ich arbeite oft mit verschachtelten try..finally-Blöcken, z.B.:
Delphi-Quellcode:
  sl := TStringList.Create;
  try
    //do something
    if sl[0] = 'lad mir ne neue StringListthen
    begin
      sl2 := TStringList.Create;
      try
        // do something
      finally
        FreeAndNil(sl2);
      end;
    end;
  finally
    FreeAndNil(sl);
  end;
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#28

Re: Abstrakter Fehler oO

  Alt 17. Sep 2006, 23:13
In dem Fall sollte man das auch, das ist korrekt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 Uhr.
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