AGB  ·  Datenschutz  ·  Impressum  







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

Sporadische Zugriffsverletzungen

Ein Thema von Hobbycoder · begonnen am 25. Jun 2018 · letzter Beitrag vom 27. Jun 2018
Antwort Antwort
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Sporadische Zugriffsverletzungen

  Alt 25. Jun 2018, 11:05
Auch wenn da ganz viel im Argen ist, konzentrieren wir uns mal auf das Wesentliche.

Schließe das Speicherleck in TfrmMain.NeuKunde .
Du erzeugst k:=TKunde.Create; , gibst aber nur frei, wenn der Kunde schon existiert.
Es würde wohl reichen, wenn du am Schluss einfach Kunden.Add(K) aufrufen würdest.
Dann kannst du dir das Kunden.LoadFromDirector(DataBaseDir); auch sparen.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#2

AW: Sporadische Zugriffsverletzungen

  Alt 25. Jun 2018, 19:40
Okay, da habe ich vergessen, k wieder freizugeben, oder aber eben Tkunden.Add(k) und mir das Load sparen.
Gibt sicherlich auch bessere Varianten, das zu lösen. Wo nun aber ganz viel im Argen ist, kann ich so nicht nachvollziehen.

Leider hat das auch nichts mit dem Problem zu tun, da die Zugriffsverletzung auch ohne hinzufügen eines neuen Kunden kommt. Aber halt eben nicht immer.
Mein Fehler muss irgendwo zwischen dem Erzeugen der Nodes und dem GetText liegen, denn wenn ich beide Proceduren durchsteppe kommt der Fehler nach BuildList und vor GetText.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.778 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Sporadische Zugriffsverletzungen

  Alt 26. Jun 2018, 10:01
.. auch wenn ich mich jetzt unbeliebt mache..
Wo sind die Unit-Tests?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Sporadische Zugriffsverletzungen

  Alt 26. Jun 2018, 10:20
Welche Version des Virtual Treeviews verwendest du denn eigentlich genau?
Kannst du bspw. in der Unit VirtualTrees.pas in der Konstante VTVersion sehen (um die Zeile 100 herum).
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#5

AW: Sporadische Zugriffsverletzungen

  Alt 26. Jun 2018, 10:43
Mein Fehler muss irgendwo zwischen dem Erzeugen der Nodes und dem GetText liegen, denn wenn ich beide Proceduren durchsteppe kommt der Fehler nach BuildList und vor GetText.
Wie sieht denn der Stacktrace an der Stelle aus?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
998 Beiträge
 
#6

AW: Sporadische Zugriffsverletzungen

  Alt 26. Jun 2018, 11:13
Welche Version des Virtual Treeviews verwendest du denn eigentlich genau?
Kannst du bspw. in der Unit VirtualTrees.pas in der Konstante VTVersion sehen (um die Zeile 100 herum).
VTVersion = '6.6.0';

Mein Fehler muss irgendwo zwischen dem Erzeugen der Nodes und dem GetText liegen, denn wenn ich beide Proceduren durchsteppe kommt der Fehler nach BuildList und vor GetText.
Wie sieht denn der Stacktrace an der Stelle aus?
Siehe Screenshots im Anhang. Zu Beachten sei an dieser Stelle im Screenshot MadExcept2.png die Zeilennummern, die bei der Unit u_daten ausgegeben werden. Diese u_daten hat gar nicht so viele Zeilen.

MadExcept1.pnp tritt auf, wenn ich vom aus der ersten Ansicht, wo im Treeview lediglich die Kundendaten stehen, einen Eintrag mittels NodeDblClick öffne und die Detaildaten angezeigt werden sollen. Übergehe ich den Fehler, so läuft das Prog ohne Fehler weiter und auch alle danach erzeugen Nodes sind alle wie gewünscht vorhanden.

MadExcept2.pnp tritt auf, wenn ich dann das Programm beenden will.
Angehängte Grafiken
Dateityp: png MadExcept1.png (54,2 KB, 31x aufgerufen)
Dateityp: png MadExcept2.png (68,3 KB, 27x aufgerufen)
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.071 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Sporadische Zugriffsverletzungen

  Alt 26. Jun 2018, 16:00
Siehe Screenshots im Anhang. Zu Beachten sei an dieser Stelle im Screenshot MadExcept2.png die Zeilennummern, die bei der Unit u_daten ausgegeben werden. Diese u_daten hat gar nicht so viele Zeilen.
Da steht zwar u_daten und Zeile 6703, aber die Funktion ist klar angegeben mit der Notify-Methode der generischen Liste. Und darauf bezieht sich auch die Zeilennummer.
Du wirst wahrscheinlich ein Objekt haben, was aber schon freigegeben ist - warum gilt es zu untersuchen - und noch als Dangling Pointer in der Liste steckt.
Das Freigeben über den Listenautomatismus oder die Erzeugung von Virtual Nodes aus diesem kaputten Objekt führt dann bei dir dann zu Problemen.

Übrigens kannst du auch ganz wunderbar sowas schreiben:

if MyObject is TPassword then

anstatt

if MyObject.Classname = TPassword.Classname then
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Sporadische Zugriffsverletzungen

  Alt 26. Jun 2018, 16:17
Was Allgemeines. So sporadische Zugriffsverletzungen deuten drauf hin, dass was mit dem Speicher nicht stimmt. Beispielsweise wurde ein Objekt freigegeben, auf das dann aber noch zugegriffen wird. Manchmal hat man Glück und die Speicherstelle enthält noch gültige Daten, aber manchmal eben auch nicht und dann kommt es zu einer Zugriffsverletzung. Also untersuche dein Code mal auf solche Situationen hin.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Sporadische Zugriffsverletzungen

  Alt 26. Jun 2018, 21:17
Jetzt fehlt noch der Hinweis auf Bereichsprüfung und Konsorten und die Basis für die Fehlersuche ist gelegt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Sporadische Zugriffsverletzungen

  Alt 27. Jun 2018, 07:04
Beispielsweise wurde ein Objekt freigegeben, auf das dann aber noch zugegriffen wird. Manchmal hat man Glück und die Speicherstelle enthält noch gültige Daten...
Was den Fehler dann um so schwerer lokalisierbar macht. Wenn z.B. durch Zufall auf dem Entwicklungsrechner immer genug Speicher vorhanden ist und darum der Speicher an der Stelle noch nicht überschrieben wurde taucht der Fehler unter Umständen gar nicht auf. Beim Benutzer, wo eine andere Speichersituation vorliegt knallt es dann sofort.

In einer solchen Situation kann man eigentlich nur mit FastMM im "FullDebug"-Modus einem solchen Problem auf die Spur kommen. Da gibt es die Möglichkeit den Speicher freigegebener Objekte mit einem Bit-Muster überschreiben zu lassen, was dann in dieser Situation das Auffinden des Problems enorm erleichtert. Da knallt es nämlich direkt beim nächsten Zugriff und man sieht im Debugger sofort wo der ungültige Zugriff erfolgte.
Ralf Kaiser
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:39 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 by Thomas Breitkreuz