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 1 von 4  1 23     Letzte »    
SuperSeb

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

Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 17:52
Hallo,

ich brauche mal wieder eure Hilfe.

Ich habe hier eine hübsche Zugriffsverletzung bei Adresse 00000000 'Lesen von Adresse 00000000' wenn ich im Code einer Klasse auf ein klasseneigenes TImage-Objekt zugreifen möchte. Also so ungefähr:

Delphi-Quellcode:
TKlasse = class
private
  Bild: TImage;
public
  procedure MachWas;
end;

//...

procedure TKlasse.MachWas;
begin
  //...
  Bild.Left := 20; //Hier rührt der Fehler her
  //...
end;
Normalerweise würde man sagen "Ganz klar, kein Objekt instanziert", aber:

Delphi-Quellcode:
constructor TKlasse.Create(AOwner: TComponent);
begin
  //...
  Bild := TImage.Create;
  //...
end;
Jetzt kommt's aber noch doller:

Wenn ich genau das gleiche, was ich mit diesem TImage-Objekt mache, mit einem anderen - nennen wir es Bild2 - mache, dann kommt kein Fehler. Und mit genau das gleiche meine ich ALLES gleich machen, d.h. cocy & paste bei allen Sachen für Bild im Code und auf Bild2 geändert.

Jetzt weis ich nicht mehr, wo ich noch nach dem Fehler suchen soll... Wenn ich die Stelle oben auskommentiere, gibts keinen Fehler mehr. Umbenennen des ersten TImage-Objekts auf irgendwas anderes bringt auch nix.

Ach ja - vllt. ist das noch wichtig: Die Fehlermeldung erscheint, wenn man die Form schließt und dann zeigt Delphi das CPU-Fenster...

Vielleicht könnt ihr mir ja einen Tipp geben, wo ich da mal ansetzen könnte zu suchen, da ich leider nicht den ganzen Code posten kann...

Gruß und Danke im Voraus

Seb
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 17:53
Existiert den eine Instanz von TKlasse?
Markus Kinzler
  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
 
#3

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 17:55
Wenn du irgendwo eine AV bei Zugriff auf $00000000 erhältst, ist das meißstens ein Zugriff auf einen Pointer, der nil ist, bzw. auf einen Klassenzeiger, der nil ist, in diesem Fall ist dieser Pointer, der nil ist, wahrscheinlich self, du hast also vergessen, die Klasse zu erzeugen.
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
SuperSeb

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

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 17:56
Darf ich zitieren:

Zitat:
Normalerweise würde man sagen "Ganz klar, kein Objekt instanziert", aber:

Delphi-Quellcode:
constructor TKlasse.Create(AOwner: TComponent);
begin
  //...
  Bild := TImage.Create;
  //...
end;
Also: Ja, es existiert eine.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 18:00
Hast Du evtl. 2 mal Bild.Free; im Source Deiner Klasse?
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
mkinzler
(Moderator)

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

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 18:01
Hier sihet man nur, das eine Instanz für den Member Bild erzeugt wird. nicht aber für die Klasse TKlasse.
Markus Kinzler
  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
 
#7

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 18:02
Nicht ob das Bild instantiiert ist, ob deine TKlasse instantiiert ist.
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
SuperSeb

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

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 18:03
nein, nur einmal im destructor.

Das Seltsame ist ja auch, dass der Code theoretisch funktionieren müsste, bei dem einen auch praktisch funzt aber bei einem auch wieder nicht!



Edit: Ja, ist sie. Kann ich garantieren. Denn sonst würde der Rest auch nicht laufen (is n bisssschen größer die Klasse als nur das oben) und ich weis auch, dass ichs selbst eingebaut hab.

Kurz gesagt: Ja, bin zu 100% sicher.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 18:08
Du hast aber TImage nicht neu deklariert? Ansonsten stimmt der Aufruf dessen Konstruktors nicht, da hier ein Parameter vom Typ TObject TComponent erwartet wird.

[edit] Parametertyp korrigiert [/edit]
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 3_of_8
3_of_8

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

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage

  Alt 18. Jan 2009, 18:08
Geh mal mit Breakpoint bis an die Stelle, wo der Fehler auftritt, und prüfe mit dem Evaluator den Wert von Self und von deinem Bild.
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
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 04:57 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