![]() |
AW: Unerklärbare Zugriffsverletzung
Jo mache ich heute Abend :) Ich bin noch etwas am experimentieren und umbasteln.
Habe es ja schonmal erwähnt, das ich ein altes Projekt als Basis genommen habe, das ist natürlich nicht ganz optimal. |
AW: Unerklärbare Zugriffsverletzung
Okay, ich habe das Problem gelöst ( :thumb: ), allerdings kann ich die Lösung nur vermuten ( :lol: ). Also:
So sahen meine beiden Arrays am Anfang aus:
Delphi-Quellcode:
Nachdem ich den Quellcode durchgepflügt, eine Single-Thread Anwendung aus dem Programm gemacht habe und der Fehler immer noch auftrat, war ich erstmal ein bisschen verzweifelt. Allerdings wollte ich noch eine Kleinigkeit optimieren.
TJobData = record
AMail, AStep, ACourses, ATimes: String; ASended, ADecontrol: Boolean; ALastTime: TTime; end; TEventData = record AMail, ACourse, ASpan, AStatus, ADate, ANote, AHash: String; end; TJobArray = array of TJobData; TEventArray = array of TEventData; Aus dem oben gezeigtem Teil wurde folgendes:
Delphi-Quellcode:
Die Events werden jetzt in einem untergeordneten Array von Jobs gespeichert. Eigentlich nur eine kleine Verschachtelung.
TEventData = record
ACourse, ASpan, AStatus, ADate, ANote, AHash: String; end; TEventArray = array of TEventData; TJobData = record AMail, AStep, ACourses, ATimes: String; ASended, ADecontrol: Boolean; ALastTime: TTime; Events: TEventArray; end; TJobArray = array of TJobData; Natürlich hatte die IDE nach dieser Änderung erstmal schön zum Rotstift gegriffen und Zeilen wie
Delphi-Quellcode:
markiert. Ist ja logisch, das Objekt war ja so nicht mehr deklariert.
Events[i].AMail := 'example@gmail.com'
Also habe ich mich durch die Fehlerliste am Rand der IDE geklickt und direkt beim Doppelklick auf den ersten Eintrag hat mich die IDE an folgende Zeile in meinem Code gebracht:
Delphi-Quellcode:
Sieht da jemand irgendwo das Objekt/Array "Events"? Also ich auch nicht :shock: Aber trotzdem war fast alles rot unterstrichen.
function AppDataPath: string;
const SHGFP_TYPE_CURRENT = 0; var path: array [0 .. MaxChar] of char; begin SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, @path[0]); Result := StrPas(path) + '\VPUpdater\'; end; Nach einem Klick auf STRG + D war auf einmal alles wieder okay (obwohl ich davor auch des öfteren mal formatiert habe). Und der Fehler war auf einmal beseitigt :twisted: Ich würde jetzt einfach mal behaupten, dass ich irgendwann mal die IDE zerschossen habe und der Compiler dann Schrott kompiliert hat. Das würde auch erklären warum in meinem Array auf einmal ein Pfad stand ('C:\Program Files\). Dieser wird nähmlich bei der obenstehenden Funktion ermittelt. Vllt. hat ja jemand eine bessere Erklärung für dieses Phänomen... Naja, hauptsache es geht jetzt. Leider war das dann ja ein Quiz ohne Antwort :roll: Immerhin hat himitsu einen Fehler in meiner Log-Funktion entdeckt und ihr habt mich unterstützt :thumb: Gruß, Lukas |
AW: Unerklärbare Zugriffsverletzung
Die richtige Konstante ist hier 'Max_Path' und nicht 'MaxChar'.
Der Buffer 'path' wird nicht gelöscht und das Ergebnis von 'SHGetFolderPath' nicht ausgewertet. In dieser Kombination kann StrPas einen riesigen String voller Speichermüll zurückgeben oder sogar eine Zugriffsverletzung auslösen. Man könnte das z.B. so lösen:
Delphi-Quellcode:
function AppDataPath: AnsiString;
const SHGFP_TYPE_CURRENT = 0; begin SetLength(Result, Max_Path); FillChar(Result[1], Max_Path, 0); SHGetFolderPath(0, CSIDL_COMMON_APPDATA, 0, SHGFP_TYPE_CURRENT, PAnsiChar(Result)); SetLength(Result, StrLen(PAnsiChar(Result))); Result := Result + '\VPUpdater\'; end; |
AW: Unerklärbare Zugriffsverletzung
Oh... wusste ich nicht. Hat bisher immer funktioniert... Vielleicht ist es ja diemal schiefgegangen :lol:
Danke für den Tipp :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 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