Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi readln wirft mit fehlern (https://www.delphipraxis.net/55434-readln-wirft-mit-fehlern.html)

katz0r 20. Okt 2005 20:31


readln wirft mit fehlern
 
Hallo Leute,

ich bin neu hier, hab mich grad angemeldet, weil ich echt nimmer weiter weiss mit meinem Programm! Ich hab schon mehrere Stunden gegoogelt und finde einfach nix. So, genug geweint hier das Problem :

Die folgende Prozedur spuckt "Invalid Pointer Operation" wenn das readln() gleich vor dem letzten end; aufgerufen wird.

Delphi-Quellcode:

procedure tdxffile.parsetext;
var s : String; i : integer;
begin
  i := length(texts);
  inc(i);
  setlength(texts, i);

  readln(datei, s);
  while(s) <> ' 0' do
  begin
    if strtoint(s) = 1 then
    begin
      readln(datei, s);
      texts[i].text := s;
    end
    else if strtoint(s) = 10 then
    begin
      readln(datei, s);
      texts[i].x1 := strtofloat(s);
    end
    else if strtoint(s) = 20 then
    begin
      readln(datei, s);
      texts[i].y1 := strtofloat(s);
    end
    else if strtoint(s) = 30 then begin
      readln(datei, s);
      texts[i].z1 := strtofloat(s);
    end
    else readln(datei, s);
   // s := '';
    readln(datei, s);
  end;
  readln(datei, s); //hier wird die Exception geworfen
  if s = 'LINE' then parseline else if s = 'TEXT' then parsetext else fakeparseentity;
end;
Aber seltsamerweise erst wenn s einmal 10 war...das heisst, die schleife läuft einmal mit s=7 und einmal mit s=8 durch ohne was zu tun, dann kommt s=10, der wert wird in mein array gespeichert und beim nächsten readln kackt er mir ab!

Grishnak 20. Okt 2005 20:48

Re: readln wirft mit fehlern
 
Ist dein "texts" ein "array of integer"? Mit "SetLength(texts, i)" bekommt es zwar i Einträge, aber von 0 bis i-1! Innerhalb der while-Schleife wird aber "texts[i]" ein Wert zugewiesen! (Außerdem wird innerhalb der while-Schleife das i auch nicht mehr hochgezählt bzw. das Array vergrößert!)

katz0r 20. Okt 2005 20:58

Re: readln wirft mit fehlern
 
texts ist ein array of ttext ;-).

Die while schleife soll nur ein Element des Arrays bearbeiten. Aber du hattest trotzdem Recht. Ich wollte die ganze zeit "ins leere" schreiben. Nur seltsam ist, dass der Debugger mir erst beim nächsten readln nen Fehler ausspuckt!

vielen Dank auf jeden Fall erstmal!

grüße, MArtin

Hansa 20. Okt 2005 23:56

Re: readln wirft mit fehlern
 
Guck dir mal Case an ! Dann wirds einfacher. 8)

dizzy 21. Okt 2005 00:05

Re: readln wirft mit fehlern
 
Zitat:

Zitat von katz0r
Nur seltsam ist, dass der Debugger mir erst beim nächsten readln nen Fehler ausspuckt!

In den Optionen einfach mal die Bereichsprüfung aktivieren. Kostet zwar ein paar wenige CPU-Cycles, aber dann wird zur Laufzeit auf das Über-/Unterschreiten von Arraygrenzen geprüft, und sofort und adequat gemeckert. Zumindest währed das Programm in der Entwicklung ist, ist diese Option oftmals recht hilfreich ;). (Im Release u.U. auch, wenn es nicht grad zeitkritische Teile betrifft.)

\Edits: Eieiei, die Rechtschreibung...

marabu 21. Okt 2005 06:59

Re: readln wirft mit fehlern
 
Liste der Anhänge anzeigen (Anzahl: 1)
Willkommen in der Delphi-PRAXiS, Martin.

Ich habe dir ein Demo-Projekt erstellt, welches dir vielleicht ein paar Anregungen für dein Projekt gibt. Dabei wird eine DXF-Datei zwar in einem Baum visualisiert, allerdings ohne Hierarchie.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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