AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Leidiges EAccessViolation bei dynamischer TabSheet-Erzeugun
Thema durchsuchen
Ansicht
Themen-Optionen

Leidiges EAccessViolation bei dynamischer TabSheet-Erzeugun

Ein Thema von triangulum · begonnen am 14. Dez 2006 · letzter Beitrag vom 14. Dez 2006
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze

  Alt 14. Dez 2006, 14:35
Neue Frage -> Neuer Thread
In der Erklärung des neuen Threads kannst du ja auf diesen hier verlinken damit die Leute wissen worum es geht.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
winnionkel

Registriert seit: 9. Dez 2005
Ort: Roßlau
63 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze

  Alt 14. Dez 2006, 20:07
Hallo,

habe mir die ganze Sache mal durchgelesen. Ich habe auch große Probleme mit undefinierten Fehlermeldungen.
Kann es sein, das Delphi 7 Probleme mit 'self' hat ?

Ich Erzeuge auch einige Objekte mit dem Parameter 'self'.
Ich bekomme bei einigen Kunden Fehlermeldungen beim Starten meines Progs.

Wenn ich in Delphi zu der Adresse des Laufzeitfehlers gehe, springt er in die Unit System zur Procedure:

Delphi-Quellcode:
procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;
Winfried
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze

  Alt 14. Dez 2006, 22:32
Die Frage hast du doch nun schon in einem anderen Thread gestellt

Grundlegend gibt es bei keiner Delphi Version die ich benutze/benutzt habe (D3, D4, D5, D6, D7 und D10) habe ich jemals Probleme mit Self gehabt. Wenn es eine AV in der von dir genannten Stelle gab, dann war immer eine ungültige Referenz der Auslöser. Entweder wurde ein Objekt freigegeben und die Instanzenvariable nicht Nil gesetzt (wie mkinzler im anderen Thread schon sagte). Eine andere Möglichkeit ist, die Instanz wurde in mehreren Variablen abgelegt und eine davon wurde freigegeben, damit wird die anderen unbemerkt ungültigt. Beispiel dazu:

Delphi-Quellcode:
Var
  lInstanz,
  lGleicheInstanz: TObject;
Begin
  lInstanz := TObject.Create;
  lGleicheInstanz := lInstanz; // beide Variablen enthalten die gleiche Instanz und [b]keine Kopie[/b]!

  lInstanz.Free; // damit wird lGleicheInstanz automatisch mit ungültig!
End;
Ein anderer Fall: Die Instanz wurde durch den Owner schon freigegeben: Beispiel: eine Variable TPanel welche ein Panel zugewiesen wurde und als Owner wurde eine Form übergeben. Wenn die Form freigegeben wird, gibt diese auch die TPanel Instanz frei und die Variable enthalt dann eine ungültige Instanz. Auch hier würde im besten Falle eine AV beim Free ausgelöst werden.

Grundlegend sollte Self immer gut sein. Wenn in einer Methode Self NIL ist, dann befindet man sich in einer Methode einer nicht instanziierten Klasse. Dieses kann auch leicht geschehen, wenn man einen virtuellen Constructor versteckt und einen neuen implementiert (Compiler Warnung kann ja mit ReIntroduce unterdrückt werden) und die Klasse aber über die Basisklasse instanziiert wird.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze

  Alt 14. Dez 2006, 22:35
Wenn im Constructor eine Exception fliegt wird die Klasse auch sofort wieder zerstört was erklären würde das du in der Methode "free" landest.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#15

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze

  Alt 14. Dez 2006, 22:39
Zitat von SirThornberry:
Wenn im Constructor eine Exception fliegt wird die Klasse auch sofort wieder zerstört was erklären würde das du in der Methode "free" landest.
Aber doch nur, wenn die Instanzenvariable vorher nicht initialisiert wurde (mit Nil) - u.a. weil es ein Member einer Klasse ist oder eine globale Variable - und die geworfene Exception nicht weiter beachtet wird und es später zum Aufruf von Free für diese "kaputte" Instanzenvariable aufgerufen wird...
  Mit Zitat antworten Zitat
winnionkel

Registriert seit: 9. Dez 2005
Ort: Roßlau
63 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze

  Alt 14. Dez 2006, 23:33
Sorry Leute. Ich habe festgestellt, das es an meiner Delphi Installation liegt.
Ich habe Delphi neu installiert.
Wenn ich jetzt Delphi starte, habe ich keine Komponenten drin.

Und wenn ich es dann beende, bekomme ich genau das Debug Fenster, wie meine Anwender auch...
Winfried
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#17

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze

  Alt 14. Dez 2006, 23:36
Keine Komponenten? Kann es sein, dass du Delphi unter einem anderen Benutzerkonto installiert hast als dem Konto in dem du es jetzt ausführst?
  Mit Zitat antworten Zitat
winnionkel

Registriert seit: 9. Dez 2005
Ort: Roßlau
63 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Leidiges EAccessViolation bei dynamischer TabSheet-Erze

  Alt 14. Dez 2006, 23:43
Ne. Hab ich nicht. Ich hatte Delphi installiert, und ohne es ein mal zu starten die Jedis installiert. Ich denke das der Fehler daher kommt.
Bin grade am neu installieren...
Winfried
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 15:36 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