AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Zugriffsverletzung bei Adresse 00000000 bei TImage
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung bei Adresse 00000000 bei TImage

Ein Thema von SuperSeb · begonnen am 18. Jan 2009 · letzter Beitrag vom 19. Jan 2009
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#21

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:02
Zitat von SuperSeb:
@3_of_8: Also, bin jetzt Zeile für Zeile durchgesprungen - läuft ohne Probleme. Der Fehler tritt erst auf, wenn man die Form schließt
Kann es sein das du beim beenden die Klasse und somit das Bild freigibst aber dann noch mal drauf zugreifst.

Mach ambesten folgendes:
* Breakpoint bei der Position wo der Fehler kommt
* Breakpoint im Destroy von der Klasse

So nun schliesst du deine Exe und springst solange weiter bis du im Destroy angekommen bist. Wird der andere Breakpoint danach noch aufgerufen?
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
SuperSeb

Registriert seit: 7. Jan 2008
17 Beiträge
 
#22

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:11
Hurra, erster Erfolg: Er kommt tatsächlich noch mal da vorbei. Abver mir ist sehr schleierhaft, wo der Aufruf herkommen soll...
Die Prozedur, in der er vorbeikommt und wo der Fehler auftaucht wird nur bei einer Größenänderung (OnResize) und im Constructor aufgerufen...



Edit: Nachtrag: Wenn ich das Bild.Free; aus dem Destructor rausnehme, gehts logischerweise. Aber das ist dann ja nicht mehr saubere OOP, oder?
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:21
Naja, ist im Prinzip auch egal, wenn das Programm beendet ist, wird der Speicher sowieso freigegeben. Aber ich frag mich auch, wieso das noch kracht - irgendwas ruft offenbar noch den Destruktor von dem Bild auf, aber wenn du keinen Owner übergibst, wer könnte das denn dann noch sein?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von gsh
gsh

Registriert seit: 24. Okt 2004
1.542 Beiträge
 
Delphi XE Architect
 
#24

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:22
Zitat von SuperSeb:
Hurra, erster Erfolg: Er kommt tatsächlich noch mal da vorbei. Abver mir ist sehr schleierhaft, wo der Aufruf herkommen soll...
Die Prozedur, in der er vorbeikommt und wo der Fehler auftaucht wird nur bei einer Größenänderung (OnResize) und im Constructor aufgerufen...



Edit: Nachtrag: Wenn ich das Bild.Free; aus dem Destructor rausnehme, gehts logischerweise. Aber das ist dann ja nicht mehr saubere OOP, oder?
ok versuch noch folgendes:
Gebe deine Klasse nicht mit Bild.Free sondern mit FreeAndNil(Bild) frei.
Dann versiehst du jeden Aufruf von Bild mit:
if Bild <> nil then Bild.Irgendwas;
Alex
"Sage nicht alles, was du weißt, aber wisse alles, was du sagst!" Matthias Claudius
"Wer sich über Kritik ärgert, gibt zu, daß er sie verdient hat." Tacitus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:27
Deshalb auch meine Frage aus #5. Vermutlich wird die Klasse bereits an anderer Stelle freigegeben und nicht genullt. Da Free aber auf Assigned prüft, knallt es dann im Destruktor.
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
SuperSeb

Registriert seit: 7. Jan 2008
17 Beiträge
 
#26

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:27
Selbst die Krücke geht nicht...

bin so langsam am verzweifeln....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:32
Jetzt prüf doch nochmal alles durch, ob
- die Klasse in jedem Fall erzeugt und
- sie nicht vor dem Aufruf des Destruktors freigegeben wird
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 turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#28

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:36
Mal eine (blöde) Frage, um was für ein Bild handelt es sich denn ( JPEG ) ?

Ich frage deswegen:

ungefähres Zitat
... Wenn ich das mit einem anderem Bild mache, klappt es ...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 20:46
Zitat von SuperSeb:
@himitsu: Also den AOwner habe ich durchgeschleift, d.h. das ist der des Klassen-Konstructors. Wahrscheinlich liegt hier der Hase im Pfeffer. Beim Erzeugen eines Objekts hatte ich dem Constructor schon mal Application mitgegeben, dann auch mal den eigenen Objektnamen. Es machte bisher keinen Unterschied und funktionierte Einwandfrei - habe auch schon gegooglet, aber so richtig schlau geworden, wo der Unterschied liegt, bin ich nicht.

Vielleicht sollte ich noch dazu sagen (jetzt werde ich wahrscheinlich gesteinigt), dass ich das Objekt unter initialization instanziere, denn wenn ich das erst bei FormCreate einbaue (habs mal getestet), kommt ein schöner Fehler.
OK, meinte zwar erstmal nur den Owner, welchen du beim .Create des Images übergibst,
aber wenn das auch "Klasse" ist, dann liegt da vermutlich wirklich das Problem.

PS: [TImage].Left greift auf dessen Owner zu ... drumm sollte da besser mal alles korrekt ablaufen!

Code:
[b]initialization[/b]
  [color=#ff0000]Klasse[/color] := TKlasse.Create([color=#0000ff]Klasse[/color]); //Ob das wohl so stimmt???
[b]end[/b].
und hier ... welchen Wert hat Klasse denn vorher?
ich vermute aber mal, daß Klasse irgendwo als eine globale Variable definiert ist, weswegen sie wohl zufällig den wert NIL enthält und warum es rein zufällt, bei diesem Aufruf nicht kracht. ([TImage].Create greift auch auf den Owner zu, wenn er existiert, also nicht NIL ist)

ja und Klasse is nicht Klasse ... es sind 2 unterschiedliche Inhalte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
SuperSeb

Registriert seit: 7. Jan 2008
17 Beiträge
 
#30

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 21:01
Also: 1. Ich arbeite da mit leeren Bildern, da ich nur die Hover- und OnClick- Eigenschaften brauche. Wenn dafür jemand ne bessere Idee hat, dann könnte ich das Ganze komplett umgehen.

Also sollte ich beim Create besser

Klasse := TKlasse.Create(Application); schreiben, oder wie sonst?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 10:19 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