![]() |
Auf legalen zugriff prüfen vor AV oder SegFault
Hallo,
wenn man Fehler macht kann es ja vorkommen, dass auch ein Zugriff über eine Objektvariable die "Assigned" ist zu einer Zugriffsverletzung führt. Da es "jemanden" gibt der diese Exception wirft müsste es doch auch möglich sein darauf zu prüfen bevor die zugriffsverletzung passiert, oder?
Delphi-Quellcode:
Oder?
If islegal(Myobject.free) then
Begin end; |
AW: Auf legalen zugriff prüfen vor AV oder SegFault
Nein, nicht wirklich. Zugriffe auf bereits freigegebene Objekte können eine Zeit lang weiterhing funktionieren (wenn auch ggf. Unsinn anstellen), solange deren Speicher nicht anderweitig benutzt wurde.
Und selbst wenn nicht, muss ja nicht immer ein ungültiger Self-Pointer sein, der einen Exception auslöst, sondern es kann eine im Objekt verwendete andere Objektreferenz sein, die inzwischen überschrieben wurde oder ein Pointer auf einen String oder auf ein Array. Je nachdem, wen man fragt, wird FreeAndNil empfohlen oder davon abgeraten. Zumindest sorgt es in den einfachen Fällen (also: Es gibt nur eine Referenz auf das Objekt) dafür, dass es keine Pointer auf freigegebene Objekte übrigbleiben. |
AW: Auf legalen zugriff prüfen vor AV oder SegFault
Zitat:
|
AW: Auf legalen zugriff prüfen vor AV oder SegFault
Ich habe das nicht ganz in der Hand ob der HttpLocalRIO oder so ähnlich für das Soap Framework von Delphi noch existiert oder nicht.
Desegen würde ich gerne auf sowas wie BadPointEr prüfen, auf allen Platformen. Zurzeit läuft all das über Exceptions...und das ist mehr als nervtötend beim debuggen Ich habe ein hierarchy von verbindungs Möglichkeiten für den SOAP client -internet domain -globale IP -Localhost Ob und wie lange HTTPLOCALRIO nach einem fehlgeschlagenen verbindungsversuch existiert habe ich nicht in der Hand. Also kann ich nicht vorher wissen ob ein Free notwendig ist oder ich damit weiter arbeiten kann. Also mache ich dann ein free und das kann wenn es nicht notwendig war Zugriffsverletzungen erzeugen... Und dann erzeuge ich den HTTPLOCALRIO neu. Gibt es Badpointer auch auf Android und IOS? |
AW: Auf legalen zugriff prüfen vor AV oder SegFault
Speziell auf SOAP und diese RIO Klassen bezogen, glaub ich eher, du benutzt das falsch. Denn diese Klassen sind eigentlich dafür da, sie über ein von ihnen dynamisch implementieres Interface (Stichwort: TVirtualInterface) anzusprechen. Und dann greift Referenzzählung von Interfaces.
Zu der Problematik allgemein: Ich hab vor längerer Zeit Weak References in Spring eingebaut und mit diesen kann man auch einfach implementieren, dass man automatisch ObjektReferenzen auf nil setzen lässt, wenn das entsprechende Objekt freigegeben wird, so dass sie dann nicht mehr auf ungültigen Speicher zeigen (Stichwort: dangling pointer) Theoretisch kann man sogar den in der RTL implementieren Mechanismus benutzen, allerdings sind alle notwendigen Routinen dafür (RegisterWeakRef und UnregisterWeakRef in System.pas) nicht von außen zugänglich. |
AW: Auf legalen zugriff prüfen vor AV oder SegFault
Ja, richtig benutzt ist der SoapClient wohl nicht dazu geeignet um festzustellen ob ein Dienst auf verscheidnen Gegenstellen erreichbar ist..
Spring funktioniert in Delphi? Spring im Sinne von Aspektorientierte Entwicklung? |
AW: Auf legalen zugriff prüfen vor AV oder SegFault
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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