AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form close - EINvalidPointer

Ein Thema von Int3g3r · begonnen am 10. Apr 2019 · letzter Beitrag vom 10. Apr 2019
 
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
715 Beiträge
 
Delphi 12 Athens
 
#7

AW: Form close - EINvalidPointer

  Alt 10. Apr 2019, 09:55
Guten Tag,

Ich verwende das erste mal eine TObjectList. Leider bekomme ich nun beim close; des Forms eine exception: EInvalidPointer 'Ungültige zeigeroperation'.


Programmbeschreibung:

Anhand einer Mitarbeiter Tabelle erstelle ich Frames. Für jeden Mitarbeiter erzeuge ich ein Frame, dies füge ich einer TObjectList(PersonList) hinzu. Der Owner bei der TObjectList ist auf true.
Wenn man TComponent-Abkömmlinge in einer TObjectlist mit OwnsObjects = true ablegt muss man sich sehr genau überlegen, wie denn nun die Verwaltung der Lebensdauer sein soll. TComponents haben normalerweise einen Owner, der automatisch alle Komponenten zerstört, wenn er selbst zerstört wird. Bei TControls ist das noch verschärft, da die auch noch einen Parent haben müssen, damit sie angezeigt werden. Der Parent ist ein Psychopath per excellance: er ermordet alle seine Kinder bevor er selbst ins Jenseits entschwindet . Es gibt da also reichlich Potential für Konflikte, zumal die Objectlist ja nicht mitbekommt, wenn ein in ihr enthaltenes Objekt anderswo zerstört wird. Sie enthält dann ungültige Objektreferenzen, die solche pointer-Fehler erzeugen, wenn die TObjectlist versucht, ihren Inhalt zu free-en.

In deinem Fall mußt Du also unbedingt die TObjectlist löschen und darfst dann auch keinen Fall mehr versuchen, eines der Frames "anzufassen", die existieren dann nämlich nicht mehr. Kode in TComponent sorgt dafür, dass der Owner benachrichtigt wird, wenn sein Eigentum externem Vandalismus anheim fällt, da gibt es also keine Probleme, und auch die Parent <-> Child Beziehung wird ordentlich beendet. Deine TObjectlist ist aber außerhalb der automatischen Verwaltung der Lebensdauer, da bist Du also selbst dafür verantwortlich, eine enthaltene Objektreferenz zu entfernen, wenn Du das Objekt anderswo zerstörst. TObjectlist hat eine Extract-Methode dafür, die entfernt eine Referenz aus der Liste ohne zu versuchen, die freizugeben.
Peter Below
  Mit Zitat antworten Zitat
 


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 16:01 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