![]() |
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:
Normalerweise würde man sagen "Ganz klar, kein Objekt instanziert", aber:
TKlasse = class
private Bild: TImage; public procedure MachWas; end; //... procedure TKlasse.MachWas; begin //... Bild.Left := 20; //Hier rührt der Fehler her //... end;
Delphi-Quellcode:
Jetzt kommt's aber noch doller:
constructor TKlasse.Create(AOwner: TComponent);
begin //... Bild := TImage.Create; //... end; 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 |
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Existiert den eine Instanz von TKlasse?
|
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.
|
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Darf ich zitieren:
Zitat:
|
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Hast Du evtl. 2 mal
Delphi-Quellcode:
im Source Deiner Klasse?
Bild.Free;
|
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.
|
Re: Zugriffsverletzung bei Adresse 00000000 bei TImage
Nicht ob das Bild instantiiert ist, ob deine TKlasse instantiiert ist.
|
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. |
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] |
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 00:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz