AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Access violation bei Zugriff auf eine PUBLIC-Variable
Thema durchsuchen
Ansicht
Themen-Optionen

Access violation bei Zugriff auf eine PUBLIC-Variable

Ein Thema von GueAck · begonnen am 3. Dez 2024 · letzter Beitrag vom 5. Dez 2024
 
GueAck

Registriert seit: 12. Jun 2009
10 Beiträge
 
Delphi 12 Athens
 
#1

Access violation bei Zugriff auf eine PUBLIC-Variable

  Alt 3. Dez 2024, 17:08
Delphi-Version: 5
Hallo,

ich habe in dem dargestellten Code eine Merkwürdigkeit: In der dargestellten Form läuft alles bestens. Wenn ich aber die Variable "Filename" in den PUBLIC-Teil verlege, dann wird die erste Datei richtig geöffnet und bearbeitet, aber beim öffnen der nächsten (!) Datei in "OpennextFil_der_Liste" gibt die Exception "Im Projekt Auflisten.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x0027a67e: read of address 0x3ca2427f'.". Im Aufruf-Stack der IDE (Delphi 12) steht als oberster Eintrag "@UStrAsG + $32".

Wenn ich auf die Zeile "Filename := f_Liste[..] einen Breakpoint setze, dann sehe ich beim ersten Aufruf, dass Filename ein leerer String ist, beim zweiten Auruf zeigt mir aber der Debugger an "Nicht verfügbarer Wert". Wie kann das sein?

Den Code habe ich vor vielen Jahren gemacht, vermutlich noch unter Delphi 7, da ist er (mit Filename im PUBLIC-Teil) sauber gelaufen.

Hat jemand eine Tdee, was die Ursache ist oder was ich falsch gemacht habe?

Grüße
GueAck

Delphi-Quellcode:
UNIT UfileListe;

INTERFACE
t_Urclass = CLASS
  PROCEDURE openfilefolge(vpfad: STRING); VIRTUAL; ABSTRACT;
  FUNCTION getzeile: boolean; VIRTUAL; ABSTRACT; {true: zeile vorhanden}
END;

t_fileListe = CLASS(t_Urclass)
  Filename: f_name; // in Public geht es nicht, das ergibt beim 2. Aufruf von opennextfild_der_luiste eine Access-violation UStrAsg
  PROCEDURE openfilefolge(vpfad: STRING); OVERRIDE;
  FUNCTION getzeile; OVERRIDE;
PRIVATE
  f_i, f_anz: integer; {Index des aktuellen Files in der f_liste }
  f_liste: ARRAY[1..fanzmax] OF STRING;
  FUNCTION opennextfile_der_liste: boolean; {True: Erfolg }
PUBLIC
  { Public-Deklarationen }
END;

IMPLEMENTATION

FUNCTION t_fileListe.getzeile;
VAR
  gefunden: boolean;
BEGIN
  // Liest alle Zeilen der aktuellen Datei ein.
  // Am Ende wird mit
  gelungen := opennextfile_der_liste;
  // die nächste Datei geöffnet.
  result := gelungen;
END;

FUNCTION t_fileArduino.opennextfile_der_liste;
BEGIN
  //...
  f_i := f_i + 1;
  Filename := f_liste[f_i]; // hier passiert der Fehler
  //...
END;

PROCEDURE t_fileArduino.openfilefolge(vpfad: STRING);
BEGIN
  // Die Nammen aller Dateien im Verzeichnis werden in die Liste f_liste eingetragen.
  f_i := 0;
  f_anz := Abzahl_der_vorhandenen_Dateien;
  opennextfile_der_luste;
END;

END.
  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 07:45 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