Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zugriffsverletzung bei Adresse 00000000 bei TImage (https://www.delphipraxis.net/127762-zugriffsverletzung-bei-adresse-00000000-bei-timage.html)

SuperSeb 18. Jan 2009 17:52


Zugriffsverletzung bei Adresse 00000000 bei TImage
 
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

mkinzler 18. Jan 2009 17:53

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
Existiert den eine Instanz von TKlasse?

3_of_8 18. Jan 2009 17:55

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
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.

SuperSeb 18. Jan 2009 17:56

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
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.

DeddyH 18. Jan 2009 18:00

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
Hast Du evtl. 2 mal
Delphi-Quellcode:
Bild.Free;
im Source Deiner Klasse?

mkinzler 18. Jan 2009 18:01

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
Hier sihet man nur, das eine Instanz für den Member Bild erzeugt wird. nicht aber für die Klasse TKlasse.

3_of_8 18. Jan 2009 18:02

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
Nicht ob das Bild instantiiert ist, ob deine TKlasse instantiiert ist.

SuperSeb 18. Jan 2009 18:03

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
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!

:coder2:

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.

DeddyH 18. Jan 2009 18:08

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
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]

3_of_8 18. Jan 2009 18:08

Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:21 Uhr.
Seite 1 von 4  1 23     Letzte »    

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