Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi EAccessViolation Fehler (https://www.delphipraxis.net/116053-eaccessviolation-fehler.html)

Tempest08 22. Jun 2008 19:41

Re: EAccessViolation Fehler
 
Beim Debuggen stoppt er an folgender Stelle:

Delphi-Quellcode:
procedure TForm1.Ausgeben;
var yPos: integer;
begin
  for yPos:= 1 to 30 do begin
    StringGrid1.Cells[1, yPos]:= '';
    StringGrid1.Cells[2, yPos]:= '';
  end;
  sportler:= schnellster;
  ypos:= 1;
  while sportler <> nil do begin
    StringGrid1.Cells[1, yPos]:= sportler^.name;
    StringGrid1.Cells[2, yPos]:= FloatToStr(sportler^.zeit); //<--- Diese Zeile sei ein EAccessViolation
    sportler:= sportler^.next;
    ypos:= ypos+1;
  end;
end;
Ist mir allerding schleierhaft, dass er die while schleife einmal komplett durchläuft und beim zweiten Mal an der benannten Stelle abbricht...

Fussball-Robby 22. Jun 2008 19:47

Re: EAccessViolation Fehler
 
Delphi-Quellcode:
StringGrid1.Cells[2, yPos]
existiert diese Zelle überhaupt?

Tempest08 22. Jun 2008 19:54

Re: EAccessViolation Fehler
 
Ja sie existiert, aber ich habe gerade eine Lösung gefunden. Aus irgendeinem Grund hat Delphi die while schleife zwei mal durchlaufen obwohl nur ein Element existierte.
Habe es jetzt wie folgt behoben, wenngleich ein wenig umständlich.

Delphi-Quellcode:
procedure TForm1.Ausgeben;
var yPos, i: integer;
begin
  for yPos:= 1 to 30 do begin
    StringGrid1.Cells[1, yPos]:= '';
    StringGrid1.Cells[2, yPos]:= '';
  end;
  sportler:= schnellster;
  ypos:= 1;
  for i:= 1 to anzahl do begin  // <-- Habe nun nach jedem Einfügen bzw. Löschen die anzahl Variable die Sportler zählen lassen
    StringGrid1.Cells[1, yPos]:= sportler^.name;
    StringGrid1.Cells[2, yPos]:= FloatToStr(sportler^.zeit);
    sportler:= sportler^.next;
    ypos:= ypos+1;
  end;
end;
So funktioniert es

NormanNG 22. Jun 2008 20:17

Re: EAccessViolation Fehler
 
Hi,

Zitat:

Ist mir allerding schleierhaft, dass er die while schleife einmal komplett durchläuft und beim zweiten Mal an der benannten Stelle abbricht...
Ich denke mal, an der Stelle
Delphi-Quellcode:
sportler:= sportler^.next;
ist das Feld "next" nicht NIL, weshalb die while-Bedingung
(sportler<>nil) weiterhin erfüllt ist...

Schau dir mal deinen Source zum Einfügen eines neuen
Sportlers an, ob dort das Feld "next" auf NIL initialisiert wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.
Seite 2 von 2     12   

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