AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit Klasse (wurde Klasse initialisiert?)
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Klasse (wurde Klasse initialisiert?)

Ein Thema von Dragon27 · begonnen am 13. Sep 2009 · letzter Beitrag vom 14. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Dragon27

Registriert seit: 20. Nov 2003
Ort: Aßling
543 Beiträge
 
Delphi XE6 Enterprise
 
#1

Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 13. Sep 2009, 22:43
Hallo,

ich habe folgenden Quellcode:

Delphi-Quellcode:
    try
      ini:=Tinifile.Create(FPfad+'Gebäude.ini');
      ini.WriteInteger('ID','Gebäude','1');
    finally
      ini.Free;
    end;
Nun sagt Delphi folgende Warnung: [DCC Warnung] Ugebäude.pas(40): W1036 Variable 'ini' ist möglicherweise nicht initialisiert worden

Wie könnte ich in diesem Zusammenhang meinen Quellcode verbessern?

Danke!
Delphi is ......... DELPHI!!
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#2

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 13. Sep 2009, 22:47
Delphi-Quellcode:
ini:=Tinifile.Create(FPfad+'Gebäude.ini');
try
  ini.WriteInteger('ID','Gebäude','1');
finally
  ini.Free;
end;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 14. Sep 2009, 07:46
Dann werden aber Fehler beim Erzeugen der Ini nicht mehr abgefangen
Markus Kinzler
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 14. Sep 2009, 07:53
Welche Fehler sollten dort denn auftreten?

Ein Konstruktur ist so gestaltet, des er keinerlei Operationen ausführt, die zu einer Exception führen können. Ausgenommen schwere Korken, wie Speicherprobleme OS-Exceptions usw. Die wird man aber in einem geregelten Betrieb eh nicht abfangen können.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 14. Sep 2009, 08:36
Es ist eher andersrum und jetzt mal auf alle Klassen bezogen....

Richtig: siehe Meflin

Falsch:
Was passiert hier, wenn im Constuctor eine Exception auftreten würde?
Delphi-Quellcode:
try
  ini := Tinifile.Create(FPfad + 'Gebäude.ini');
  ...
finally
  ini.Free;
end;
Genau, der Constructor räumt den Speicher auf und weißt nix der Variable "ini" zu ... also "ini" ist undefiniert und enthält sonstwelche Werte.

Nun leitet diese Exception die Programmausführung in den Finally-Block, wo ini.Free mit irgendwas in "ini" ein nicht existierendes Objekt freigeben will, was zu nocheiner Exception oder Schlimmeren führt.

PS: der Compiler bemeckert hier zurecht ein nicht initialisiertes "ini"
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 14. Sep 2009, 09:46
Zitat von alzaimar:
Welche Fehler sollten dort denn auftreten?
Im Konstruktor können eine ganze Menge Fehler auftreten. Nur hat der Konstruktor einen eigenen Ressourcenschutzblock. Dadurch kann er dafür sorgen, dass bei einem Fehler gleich der Destruktor automatisch aufgerufen wird. Und wie himi schon schrieb liefert der Konstruktor dann nil zurück, weswegen man auch kein Free aufrufen darf (und auch nicht muss).
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 14. Sep 2009, 09:51
Wenn der Konstruktor wirklich nil zurückgibt, sollte das Free aber auch nicht zum Fehler führen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 14. Sep 2009, 09:52
Nicht ganz ....NIL liefert der dann nicht zurück ... er macht das, was jede andere Funktion auch macht, wenn sie durch eine Exception beendet wurde ... die gibt garkeinen Rückgabewert zurück und die Variable (hier "ini" bleibt unverändert.

Und wie wir alle wissen (sollten), wird eine Objektvariable nicht automatisch initialisiert (so wie z.B. die Strings) und kann sonstwelche zufälligen Werte enthalten.
$2B or not $2B
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 14. Sep 2009, 19:08
Zitat von sirius:
Zitat von alzaimar:
Welche Fehler sollten dort denn auftreten?
Im Konstruktor können eine ganze Menge Fehler auftreten.
*Sollten* aber nicht. Konstruktoren sind so zu implementieren, das keine vorhersehbaren Exceptions auftreten. Das Murphy zuschlägt ist klar, man muss ihn aber nicht einladen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Problem mit Klasse (wurde Klasse initialisiert?)

  Alt 14. Sep 2009, 19:23
Wenn z.B. jemand versucht aus meiner Klasse ein Objekt zu erstellen und dazu "falsche" Parameter übergibt, dann werfe ich im Constructor eine Exception und fertig.
Ebenso, wenn man z.B. einen FileStream erstellt und kein Zugriff auf die Datei besteht.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:54 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