AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi sporadische Exception beim Freigeben von TLabels
Thema durchsuchen
Ansicht
Themen-Optionen

sporadische Exception beim Freigeben von TLabels

Ein Thema von Gausi · begonnen am 27. Dez 2022 · letzter Beitrag vom 4. Jan 2023
Antwort Antwort
Seite 2 von 2     12   
DenkDirNix

Registriert seit: 13. Dez 2018
71 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: sporadische Exception beim Freigeben von TLabels

  Alt 30. Dez 2022, 08:07
Vielleicht ein WorkAround:
Vor dem Löschen eines Labels den Parent auf nil setzen.
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: sporadische Exception beim Freigeben von TLabels

  Alt 30. Dez 2022, 11:34
Wie gesagt, ich habe jetzt zwei Vorschläge von hier in den Code übernommen und hoffe, dass das Problem damit behoben ist.

Beim Clear der Objectlist werden die einzelnen Controls freigegeben. Dabei wird (unter anderem) der Parent auf Nil gesetzt, wodurch das Parent benachrichtigt wird, dort wird es aus den Child-Controls ausgetragen etc. pp. Beim Realign des Parents kommt es dann aus unbekannter Ursache selten (sehr selten) zu einem Problem. Wenn man das unterbindet, sollte das erledigt sein.

Die Funktion wird sehr oft aufgerufen (praktisch immer, wenn man ein Item auswählt), und ich habe nie Probleme damit beobachten können. Threads spielen an der Stelle keine Rolle - oder allenfalls indirekt, falls freigegebener Speicher "zu schnell" wieder von einem anderen Thread beansprucht wird. Dann aber sollte die Zugriffsverletzung eher an einer zufälligen Adresse passieren, und nicht an $08.
Diese Labels werden auch nicht an vielen Stellen im Code benutzt. Sie werden zur Anzeige erstellt, dargestellt, und jedes Label bekommt ein paar EventHandler (MouseEnter/Leave für Underline-Effekt, OnDoubleClick). Das wars auch schon, kein wilder Spaghetti-Code dabei.

Ein offensichtlicher Konzeptfehler liegt wohl nicht vor (sonst gäbe es andere Antworten, schätze ich ). Von daher habe ich das jetzt (erstmal) abgehakt. Nach dem nächsten Release schau ich dann mal weiter.
The angels have the phone box.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.211 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: sporadische Exception beim Freigeben von TLabels

  Alt 30. Dez 2022, 11:36
Vielleicht ein WorkAround:
Ein Workaround ohne die Ursache zu kennen ist böse.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#14

AW: sporadische Exception beim Freigeben von TLabels

  Alt 30. Dez 2022, 11:44
Im großen FastMM und Ähnlichem gibt es die Möglichkeit freigegebenen Speicher mit 0 oder besser einem Pattern überschreiben zu lassen.

Dann merkt man es besser, wenn ein Objekt doppelt freigegeben wird, bzw. wenn man versucht auf Speicher zuzugreifen, welchen es nicht mehr gibt.
$2B or not $2B
  Mit Zitat antworten Zitat
DenkDirNix

Registriert seit: 13. Dez 2018
71 Beiträge
 
Delphi 11 Alexandria
 
#15

AW: sporadische Exception beim Freigeben von TLabels

  Alt 30. Dez 2022, 21:18
Vielleicht ein WorkAround:
Ein Workaround ohne die Ursache zu kennen ist böse.
Das würde ich so grundsätzlich nicht sagen.
Dem Kunden ist es egal, ob der Entwickler auch die Ursache zu 100% analysiert hat. Hauptsache er hat ein laufendes Programm (abhängig von der Häufigkeit und Auswirkung des Fehlers, seinem subjektiven Leidensdruck).
Aber natürlich darf es nicht in "herumprobieren" ausarten, da stimme ich Dir vollkommen zu. Ein schwieriger Zielkonflikt...

Geändert von DenkDirNix (31. Dez 2022 um 08:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

AW: sporadische Exception beim Freigeben von TLabels

  Alt 30. Dez 2022, 22:01
Problem dabei ist, dass das Problem eventuell garnicht behoben ist, sich nur gerade nicht so zeigt und dann später wieder zuhaut.

Eigentlich sollte es keine Probleme geben, wenn man etwas freigibt, da es sich selbst vorher überall deregistrieren sollte, bevor es ganz weg ist,
aber natürlich kann es hier helfen, wenn es hier irgendwo dadurch raucht, wenn man selbst die Komponente vorher aus der GUI rauszunehmen (Parent=nil).
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: sporadische Exception beim Freigeben von TLabels

  Alt 4. Jan 2023, 22:52
Ich konnte vor Jahren ein ähnliches Problem umgehen, indem ich Controls nicht freigegeben sondern nur auf Visible := False gesetzt habe.
Die Freigabe habe ich dann später erledigt. Das Problem war wohl, dass Windows ein Control nochmal zeichnen wollte, obwohl es schon freigegeben war. Dieses hatte allerdings auch den Fokus zum Zeitpunkt der Freigabe.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#18

AW: sporadische Exception beim Freigeben von TLabels

  Alt 4. Jan 2023, 23:31
Sowas kann passieren, wenn das Freigeben innerhalb eines Events des Controls geschieht.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:41 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