Delphi-PRAXiS
Seite 1 von 2  1 2      

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 18:59


EAccessViolation Fehler
 
Delphi-Quellcode:
TZeiger =^TSportler;
  TSportler = record
                name : string[50];
                zeit : real;
                next : TZeiger;
              end;

var
  Form1: TForm1;
  ExDatei: file of TSportler;
  gespeichert: boolean;
  Sportler, Schnellster, vor: TZeiger;
  Anzahl, y: integer;

implementation

uses Unit2;

{$R *.dfm}


procedure TForm1.FormActivate(Sender: TObject);
var n: integer;
begin
  vor:= nil;
  schnellster:= nil;
  gespeichert:= false;
  with StringGrid1 do begin
    ColCount:= 3;
    RowCount:= 31;
    Cells[1, 0]:= 'Name';
    Cells[2, 0]:= 'Zeit';
  end;
  for n:= 1 to 30 do StringGrid1.Cells[0, n]:= IntToStr(n);
end;


procedure TForm1.Einfuegen1Click(Sender: TObject);
begin
  form2.visible:= true;
end;


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);
    sportler:= sportler^.next;
    ypos:= ypos+1;
  end;
end;

   
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  y:= ARow;
end;


procedure TForm1.Loeschen1Click(Sender: TObject);
var handle: string[50];
    time: real;
begin
  handle:= StringGrid1.Cells[1, y];
  time:= StrToFloat(StringGrid1.Cells[2, y]);
  sportler:= schnellster;
  while (handle <> sportler^.name) and (sportler^.zeit <> time)
    do begin
      vor:= sportler;
      sportler:= sportler^.next;
    end;
  vor^.next:= sportler^.next;
  dispose(sportler);
  ausgeben;
end;


// neues Formular

procedure TForm2.EinfuegenClick(Sender: TObject);
var neu: TZeiger;
begin
  new(neu);
  neu^.name:= NameEd.Text;
  neu^.zeit:= StrToFloat(ZeitEd.Text);
  if schnellster = nil
    then schnellster:= neu
    else begin
      neu^.next:= schnellster;
      schnellster:= neu;
    end;
  gespeichert:= false;
  form1.ausgeben;              // an dieser Stelle tritt bei Betätigung dieses Knopfes ein EAccessViolation-Fehler auf
  form2.visible:= false;
end;
Hat jemand eine Idee wo der Fehler sein könnte???

SirThornberry 22. Jun 2008 19:01

Re: EAccessViolation Fehler
 
wie lautet die genaue Fehlermeldung? vor allem die Adressen der AccessViolation sind wichtig.
Ich würde auf anhieb sagen das Form1 nicht erzeugt wurde zu dem Zeitpunkt wo darauf zugegriffen wird.

Tempest08 22. Jun 2008 19:04

Re: EAccessViolation Fehler
 
'Zugriffsverletzung bei Adresse 004044BE in Modul Project1.exe. Lesen von Adresse 02746665'

Fussball-Robby 22. Jun 2008 19:11

Re: EAccessViolation Fehler
 
Setz mal einen Breakpoint(F5) auf die Zeile, und debug von da aus (F7). Der Fehler tritt wahrscheinlich in der Prozedur TForm1.Ausgeben auf.

Tempest08 22. Jun 2008 19:22

Re: EAccessViolation Fehler
 
''Datei nicht gefunden "SysConst.pas"'' ??

Die Muhkuh 22. Jun 2008 19:23

Re: EAccessViolation Fehler
 
Von was redest Du?

Tempest08 22. Jun 2008 19:24

Re: EAccessViolation Fehler
 
Wenn ich die Zeile "form1.ausgeben" mit F5 markiere und dann mit F7 debugge erscheint nach zweimaligem Betätigen von F7 oben genannte Fehlermeldung

SirThornberry 22. Jun 2008 19:28

Re: EAccessViolation Fehler
 
Wie sieht die Methode "ausgeben" von TForm1 aus? und wenn du einen Haltepunkt auf die erste Anweisung von "ausgeben" setzt, wird dieser erreicht oder kommt die Zugriffsverletzung vorher?

Tempest08 22. Jun 2008 19:34

Re: EAccessViolation Fehler
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was meinst du mit Methode???

Wenn ich F7 drücke nachdem ich die erste Zeile von ausgeben markiert habe, erscheint im Anhang zu findendes Fenster

Neutral General 22. Jun 2008 19:36

Re: EAccessViolation Fehler
 
Du musst das Projekt starten... Wird die markierte Stelle im Code bei der Ausführung erreicht, hält das Programm an und du hast wieder den Code vor dir. Von da an kannst du mit F7 Schritt für Schritt durch den Code gehn, das heißt jede Zeile einzeln und nacheinander ausführen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:15 Uhr.
Seite 1 von 2  1 2      

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