AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Wie bekommt man eine "Warnung" weg ?

Ein Thema von jfheins · begonnen am 7. Sep 2004 · letzter Beitrag vom 9. Sep 2004
Antwort Antwort
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#1

Wie bekommt man eine "Warnung" weg ?

  Alt 7. Sep 2004, 15:46
Ich hätte da mal eine frage,
Ich bekomme bei meinem Quellcode immer ein
Zitat:
[Warnung] Unit1.pas(349): Variable 'Ini' ist möglicherweise nicht initialisiert worden
möchte das aber weghaben. Wie muss ich meinen Quellcode verändern ?
Muss ich das Ini.free an eine andere stelle schreiben ? Ich möchte ungern das Ini.create dort webnehmen, da dann möglicherweise ein laufzeitfehler entstehen könnte. Oder nicht ?

Zum Verständnis: Der Quellcode:
Delphi-Quellcode:
procedure TRefresh.Execute;
begin
 try
  fehler := sfehler;

  Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Wechselkurse.ini');
  // Anweisungen
 except
  // Fehlermeldung
 end;
 Ini.Free; // <<< Hir kommt die Warnung
end;
  Mit Zitat antworten Zitat
Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Wie bekommt man eine "Warnung" weg ?

  Alt 7. Sep 2004, 15:48
hi,

bei ini-files verwende lieber einen try...finally-block. in deinem fall kannst du den ja mit dem try...except-block verschachteln. denn das ini.free; sollte nach finally kommen

Aenogym
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Wie bokommt man eine "Warnung" weg ?

  Alt 7. Sep 2004, 15:48
Hi,

die Warnung kommt, weil es nicht sicher, dass "Ini" initialisert wurde. Das passiert, wenn es vor dem erstellen einen Fehler gibt und zum resourenschutzblockende gesprungen wird.

Du könntest es so lösen:
Delphi-Quellcode:
procedure TRefresh.Execute;
begin
  Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Wechselkurse.ini');
  try
    try
      fehler := sfehler;
      // Anweisungen
    except
     // Fehlermeldung
    end;
  finally
    Ini.Free; // <<< Hir kommt die Warnung nicht mehr... ;)
  end;
end;
mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Wie bekommt man eine "Warnung" weg ?

  Alt 7. Sep 2004, 15:49
Es heißt im nix anderes als das dein IniObject möglicherweise nicht initalisiert wird Bastel dein Try-block zu einem Try-Finally Block um denn derzeit kann es vorkommen das bei einem fehler der vor "Ini := TIniFile.Create" auftaucht trotzdem noch "Ini.Free" aufgerufen wird.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#5

Re: Wie bekommt man eine "Warnung" weg ?

  Alt 7. Sep 2004, 16:23
Lösung:
Einfach das TIniFile.Create (...); vor den try-Block schreiben.
Ich wollte das erst nicht, bis ich bemerkt habe, dass der Befehl die ini-Datei gar nicht erstellt.
Stimmt doch, oder ???
  Mit Zitat antworten Zitat
dango

Registriert seit: 6. Sep 2004
Ort: Büdingen-Büches
9 Beiträge
 
#6

Re: Wie bekommt man eine "Warnung" weg ?

  Alt 9. Sep 2004, 10:23
Du kannst das create auch innerhalb des try-Blocks lassen und Ini for dem try-Block erstmal mit nil initialisieren ! Ich war zwar auch ein wenig überrascht, aber genau dadurch hatte ich gerade gestern einige schwerwiegende Fehler in meinem Programm !

So wie Du es ursprünglich hattest, würde es zu einem Fehler kommen, wenn es beim create zu einer Exception kommt und free dann für das nicht initialisierte ini aufgerufen würde. Hast Du ini aber vorher mit nil belegt, geht alles glatt !

Ich würde es so machen:

Delphi-Quellcode:
procedure TRefresh.Execute;
begin
  try
    Ini := nil;
    try
      fehler := sfehler;
      Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Wechselkurse.ini');
    finally
      Ini.Free;
    end;
  except
  end;
end;
Gruß
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.551 Beiträge
 
#7

Re: Wie bekommt man eine "Warnung" weg ?

  Alt 9. Sep 2004, 10:29
Die einfachste Möglichkeit ist, ein
Code:
ini := nil;
in die erste Zeile zu schreiben. Ein .Free kann auch auf Nil aufgerufen werden (Klassenmethode, die nichts macht wenn die klassenreferenz nil ist) und die Warnung ist weg.
Sebastian P.R. Gingter
不死鳥 Visit my Blog.
Do not argue with an idiot. They lower you to their level and then try to beat you with experience.
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.551 Beiträge
 
#8

Re: Wie bekommt man eine "Warnung" weg ?

  Alt 9. Sep 2004, 10:32
Das wäre wohl so in etwas die Lösung:
Delphi-Quellcode:
procedure TRefresh.Execute;
begin
  Ini := nil;
  try
    try
      fehler := sfehler;
      Ini := TIniFile.Create(ExtractFilePath(Application.ExeName) + 'Wechselkurse.ini');
    except
      // fehlerbehandlung
    end;
  finally
    Ini.Free;
  end;
end;
Sebastian P.R. Gingter
不死鳥 Visit my Blog.
Do not argue with an idiot. They lower you to their level and then try to beat you with experience.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf