Hallo,
Ein Text File wird in einen String geschrieben und soll dann an eine Auswerte-Procedure übergeben werden.
Bei größeren Strings bekomme ich zur Laufzeit an der im Code gekennzeichneten Stelle einen EAccessViolation Error.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure TForm1.LoadClick(Sender: TObject); var F_Data: string; begin if OpenDialog1.Execute then F_Data := FileToString(ExtractFileName(Opendialog1.FileName)); Auswerten(F_Data); end;
procedure TForm1.Auswerten(Empfang: string); begin for i := 1 to Length(Empfang) do begin end; end;
function TForm1.FileToString(const AFilename: string; StartPos: Integer = 0; EndPos: Integer = 0): string; var FileStream: TFileStream; wlCount: Integer; begin if FileExists(AFilename) then begin if StartPos < 0 then StartPos := 0; FileStream := TFileStream.Create(AFilename, fmOpenRead or fmShareDenyWrite); try if (EndPos <= StartPos) or (EndPos > FileStream.Size) then EndPos := FileStream.Size; wlCount := EndPos - StartPos; if FileStream.Size > StartPos then begin SetLength(Result, wlCount); FileStream.Seek(StartPos, soFromBeginning); FileStream.Read(Result[1], wlCount); end; finally FileStream.Free; end; end else Result := ''; end; |
Die Hilfe sagt dazu:
EAccessViolation wird ausgelöst, wenn eine Anwendung
- einen nil- (Delphi) bzw. NULL- (C++) Zeiger dereferenziert.
- in den Speicher schreibt, der für ausführbaren Code reserviert ist,
- versucht, auf eine Speicheradresse zuzugreifen, für die der Anwendung
kein virtueller Speicher zugewiesen wurde.
Leider hilft mir das nicht wirklich weiter !
Kann mir jemand einen Tip geben.
Warum tritt der Fehler auf ?
Und wie kann ich ihn vermeiden ?