Problem mit Pointer eines TFrame Arrays
-
Hallo zusammen,
ich stehe vor einem Problem, bei dem ich mir nicht sicher bin, ob ich den Wald vor lauter Bäumen nicht sehe oder was da los ist...
Ich habe ein Array vom Typ TMyFrame. Ich erstelle zur Laufzeit mehrere Objekte von TMyFrame und speicher sie nacheinander in dem Array ab (Fixed Size).
Soweit alles bestens, ich setze die MainForm als Owner, setze nen Parent etc.
Die Frames werden angezeigt und ich kann problemlos auf die Komponenten des Frames zugreifen (über die Pointer im Array).
ABER: Jetzt wollte ich von der MainForm aus eine eigene public Methode des Frames aufrufen:
MyFrames[index]->MyFun();
Innerhalb dieser Funktion wird auf ein DB DataSet des Frames zugegriffen, was zu einer Zugriffsverletzung führt.
Ich habe mir das im Debugger angeschaut und die Pointer im Array zeigen auf die richtigen Frame-Objekte. Scheint alles bestens zu sein.
Innerhalb der aufgerufenen Funktion enthält this allerdings eine andere Speicheradresse. Ein Blick in den Speicher zeigt, dass das dort referenzierte Frame-Objekt entweder nicht existiert oder nicht initalisiert wurde (unsinnige Werte der einzelnen Unterobjekte)! Dadurch zeigt z.B. das DataSet auf NULL und erzeugt natürlich eine Zugriffsverletzung...Wie zum Geier kann es sein, dass ich eine Funktion eines Objektes aufrufe und innerhalb dieser Funktion das Objekt (welches die Funktion enthält) auf einmal ein anderes ist???
Ich hoffe das war halbwegs verständlich, ansonsten poste ich noch Code.
Vielen Dank schonmal!
-
Hallo
Vermutlich ist der Wert in index bei dem fehlerhaften Aufruf außerhalb der Array-Größe.
bis bald
akari
-
Hi,
nein, das wird abgefangen und ich habe es auch manuel im Debugger überprüft.
Die Indizes und die Adressen im Array stimmen.
-
Hallo
Eine andere Ursache gibts aber nicht. Wenn this in einer Methode nicht gültig ist, dann wurde die Methode über einen ungültigen Zeiger aufgerufen. Die Ursache kann natürlich noch viel tiefer stecken als ein zu großer Index. Benutzt nochmal den Debugger, und überprüf nochmal alles, selbst das was du jetzt noch als korrekt ansiehst.
bis bald
akari
-
Ja geil, warum fallen einem die Unaufmerksamkeiten natürlich erst nach dem Posten auf?!
Ich war mir zunächst auch sicher, dass es an dem Zeiger liegen muss, hab dann aber nochmal hier gepostet, weil ich mir nicht mehr ganz sicher war, ob es nicht auch am Frame-Objekt liegen könnte.
Und natürlich:
wenn ich versuche das Objekt über die Adresse des Zeigers zu referenzieren, anstatt über die Adresse die der Zeiger enthält dann kann es auch nicht klappen!"Well, it was an ID 10 T error" - got it?!
Danke trotzdem