AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Schutzverletzung nach Programmende
Thema durchsuchen
Ansicht
Themen-Optionen

Schutzverletzung nach Programmende

Ein Thema von Walter Landwehr · begonnen am 2. Mär 2015 · letzter Beitrag vom 3. Mär 2015
Antwort Antwort
Seite 1 von 2  1 2      
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#1

Schutzverletzung nach Programmende

  Alt 2. Mär 2015, 18:03
Hallo, wenn ich mein Programm im Netzwerk auf einem Windows 8.1 pro Rechner beende, kommen die im Anhang beigefügten Meldungen. Im Modul im OnDestroy sind keine Anweisungen mehr, ebenso im Mainformular unter OnClose, OnCloseQuery und OnDestroy habe ich testhalber alle Anweisungen herausgenommen. Die Anwendung schließt sich und nach ca. 2 Sekunden kommen die Meldungen. Hat jemand eine Idee wo man noch suchen könnte.

Danke schon mal im voraus für Eure Hilfe.
Angehängte Dateien
Dateityp: pdf Programmende.pdf (96,6 KB, 29x aufgerufen)
Walter Landwehr
Mfg

Walter

Geändert von Walter Landwehr ( 2. Mär 2015 um 18:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Schutzverletzung nach Programmende

  Alt 2. Mär 2015, 18:19
Also damit kann hier auch keiner was anfangen, da wir nicht wissen was an den Adressen liegt, also bei dir, in deinem Programm, das wir nicht kennen.

Idee: Du nimmst den Debugger und schaust mal, ob der dir mehr sagt.

Alle Adressen, die irgendwas mit 0000???? zu tun haben, deuten start auf nil hin, also daß auf etwas zugegriffen wird, was nicht existiert. (ein nil-Pointer, bzw. nil-Objektzeiger)



PS: Das nächste Mal bitte als Bild(er) anhängen, ober besser noch Strg+C, in diesen Dialogen, und dann im Beitragseditor wieder Strg+V (kopiert als Text).
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Mär 2015 um 18:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#3

AW: Schutzverletzung nach Programmende

  Alt 2. Mär 2015, 18:22
Da wird auf irgendein Objekt zugegriffen, das nicht mehr existiert, jedenfalls deutet darauf die Adresse nil hin.

MfG Dalai
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.465 Beiträge
 
Delphi 12 Athens
 
#4

AW: Schutzverletzung nach Programmende

  Alt 3. Mär 2015, 09:28
Eine mögliche Ursache sind Formulare die Member vom Typ Interface haben.
Die sollte man möglichst schon beim Schließen auf nil setzen.
Die Formulare werden zwar irgendwann automatisch zerstört, aber zu diesem Zeitpunkt kann auch das Objekt, auf das ein Interface verweist, bereits zerstört sein.
Die automatische Referenzzählung löst dann eine Zugriffsverletzung aus.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Schutzverletzung nach Programmende

  Alt 3. Mär 2015, 09:39
Ich könnte mich irren, aber schluckt der normale Delphi-Speichermanager (zumindest beim Herunterfahren) diese Fehler nicht? Wenn der Referenzzähler auf einer bereits freigegebenen Instanz dekrementiert werden soll? Natürlich ist das falsch die Referenzen vorher nicht von Hand auf Nil zu setzen, aber ich meine...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Schutzverletzung nach Programmende

  Alt 3. Mär 2015, 09:57
Nein, natürlich nicht.

Es wird IInterface._Release; "aufgerufen", wenn eine Interface-Variable freigegeben wird, und dafür muß das interne Objekt noch existieren.
Und mit dem Speichermanager hat das nix zu tun.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.160 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Schutzverletzung nach Programmende

  Alt 3. Mär 2015, 10:02
Ich sehe nur dass ich in einer "normalen" VCL-Anwendung keine Fehlermeldung bekomme, noch nicht einmal im Debugger. Wenn ich nun bspw. "FastMM4" als erstes in die uses der DPR nehme hält er dort an und wirft AVs.

Delphi-Quellcode:
program Project22;

uses
  //FastMM4,
  Vcl.Forms,
  Unit8 in 'Unit8.pas{Form8};

{$R *.res}

var
   intfRef:   IInterface;
begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm8, Form8);
  intfRef := Form8;
  Application.Run;
end.
Delphi-Quellcode:
unit Unit8;

[...]
type
  TForm8 = class(TForm, IInterface)

[...]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Schutzverletzung nach Programmende

  Alt 3. Mär 2015, 10:15
FastMM ist immer drin, denn das ist seit 2006 integriert.

Und globale Interface-Variablen, auf Interfaces ohne Referenzzählung, denen diese Instanzen egal sind ... wer wundert sich dort?

Wenn du FastMM4 einbindest, dann wird das eventuell freigegeben, bevor diese globale Projekt-Variable freigegeben wird,
während der Standard-Speichermanager in der System.pas liegt.

Und das ist ein Grund, warum ich endlich überall [Weak]-Referenzen haben will,
aber hier (globales intfRef) bist du selber Schuld.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 3. Mär 2015 um 10:18 Uhr)
  Mit Zitat antworten Zitat
Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
397 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Schutzverletzung nach Programmende

  Alt 3. Mär 2015, 10:46
Ich habe bei mir den Fehler gefunden. Und zwar setze ich auf mein Hauptformular die Komponente TAdvOfficeStatusBarOfficeStyler von TMS ein. Auf mein Datenmodul liegt die Komponente TAdvPanelStyler ebenfalls von TMS. Beide Komponenten auf ein Formular geht nicht. Wo kann man denn den TADVPanelStyler noch ablegen damit das Programm richtig ohne Meldung herunterfährt.

Die Einträge in meiner Projektdatei sehen so aus:

Delphi-Quellcode:
  Application.Initialize;
  Application.CreateForm(TdmMain, dmMain);
  Application.CreateForm(TfrmMain, frmMain);
  Application.MainFormOnTaskbar := True;
  Application.Run;
Walter Landwehr
Mfg

Walter

Geändert von Walter Landwehr ( 3. Mär 2015 um 10:50 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#10

AW: Schutzverletzung nach Programmende

  Alt 3. Mär 2015, 10:53
Ich vermute mal gar nicht.
Als alternative müsstest du diese zur Laufzeit (Dynamisch) einbinden.
Ob diese sich aber gegenseitig stören kann ich allerdings nicht mit Bestimmtheit sagen.

gruss

Geändert von EWeiss ( 3. Mär 2015 um 11:08 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:34 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