AGB  ·  Datenschutz  ·  Impressum  







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

access violation Cannot read

Ein Thema von Guenni_d · begonnen am 16. Jul 2002 · letzter Beitrag vom 18. Jul 2002
Antwort Antwort
Guenni_d

Registriert seit: 4. Jul 2002
5 Beiträge
 
#1

access violation Cannot read

  Alt 16. Jul 2002, 09:20
Hallo zusammen,

habe mit folgendem Code ein kleines Problem. Wollte eine ganz galante Lösung machen um ein Textfile einzulesen. Ich weiss, hätte es auch mit Readln und den ganzen alten Pascal Funktionen machen können.

Habe aber nun mit untenstehender Funktion ein kleines Problem. NAch FreeMem bekomme ich nämlich eine access violation...

Jemand ne Idee?


Code:
procedure Languageeinlesen;
var
  iFileHandle: Integer;
  iFileLength: Integer;
  iBytesRead: Integer;
  Buffer: PChar;
  i: Integer;
  x: string;
begin
    try
      iFileHandle := FileOpen('AMS.LG', fmOpenRead);
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(AllocMem(iFileLength + 1));
      iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
      FileClose(iFileHandle);

      for i := 0 to iBytesRead-1 do
      begin
       StringGrid1.RowCount := StringGrid1.RowCount + 1;
        StringGrid1.Cells[1,i+1] := Buffer[i];
        StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));

      end;

    finally
      FreeMem(Buffer);
Gruss Günter
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#2
  Alt 16. Jul 2002, 09:32
Hallo Guenni_D,

wenn eine der ersten beiden Zeilen eine Exception auslöst, ist Buffer noch undefiniert (Nil) und FreeMem läuft auf einen Fehler.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 16. Jul 2002, 11:58
Moin Günter,

probier's mal so:

Code:
begin
  iFileHandle := FileOpen('c:\AMS.LG', fmOpenRead);
  if iFileHandle <> INVALID_HANDLE_VALUE then
  begin
    try
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(AllocMem(iFileLength + 1));
      try
        iBytesRead := FileRead(iFileHandle,Buffer[0], iFileLength);
        for i := 0 to iBytesRead-1 do
        begin
          StringGrid1.RowCount := StringGrid1.RowCount + 1;
          StringGrid1.Cells[1,i+1] := Buffer[i];
          StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
        end;
      finally
        FreeMem(Buffer,iFileLength+1);
      end;
    finally
      FileClose(iFileHandle);
    end;
  end;
end;
Wichtig ist beim Lesen Buffer[0], sonst schreibt die Leseroutine in's Nirvana.

***EDIT***
Es ist übrigens recht gefährlich keinen Pfad für die Datei mit anzugeben, und sei es, mit ExtractFilePath(paramstr(0)), relativ zum Programm.
So wie Du es geschrieben hast, greifst Du auf die Datei relativ zum Arbeitsverzeichnis zu, und das kann leicht schiefgehen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Guenni_d

Registriert seit: 4. Jul 2002
5 Beiträge
 
#4

Danke.....

  Alt 18. Jul 2002, 14:54
lag tatsächlich daran, dass ich relativ zuzm Pfad zugegriffen hab....
Danke für den Tip.
Gruss Günter
  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 21:22 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