Einzelnen Beitrag anzeigen

Riclem

Registriert seit: 16. Mai 2014
8 Beiträge
 
#1

EAccessViolence bei Linearer Liste

  Alt 6. Mär 2016, 12:39
Delphi-Version: 2005
Hey,

ich arbeite zur Zeit an einem Schulprojekt und komme bei einem Fehler einfach nicht weiter.
Ich habe eine FirstIn-FirstOut-Liste, bei der Elemente hinzugefügt und gelöscht werden. Für Hilfe bin ich wirklich dankbar.
Listendefinition:
Delphi-Quellcode:
type
  Zeiger = ^elementtyp;

  elementtyp = record
    Zeit_Kunde_an: integer;
    Zeit_Kunde_noetig: integer;
    ref: Zeiger;
  end;
Hinzufügen von Elementen
Delphi-Quellcode:
procedure FiFo(Anker: Zeiger);
var p, q: Zeiger;
  stop: integer;
begin
  stop := GetTickCount;
  while ((GetTickCount) < (stop + 1600)) and (Form1.Aufhoeren.checked=false) do
  begin
    new(q);
    q^.ref := nil;
    q^.Zeit_Kunde_an := GetTickCount;
    q^.Zeit_Kunde_noetig := 1000;
    if Anker = nil then
      Anker := q
    else
      p^.ref := q; //Hier war früher eine EAccessViolation - auf wundersame Weise verschwunden
    p := q;
    Form1.K1_Z.caption := IntToStr(StrToInt(Form1.K1_Z.caption) + 1);
    Pausieren(400);
  end;
end;
Löschen von Elementen
Delphi-Quellcode:
procedure Bearbeitung();
var K_Z_noetig: integer;
  p: Zeiger;
begin
  while Form1.Aufhoeren.checked = false do
  begin
    if (StrToINt(Form1.K1_Z.Caption) > 0) and (Form1.Aufhoeren.checked = false) then
    begin
      K_Z_noetig := K1_A^.Zeit_Kunde_noetig;
      Pausieren(K_Z_noetig);
      p := K1_A;
      K1_A := K1_A^.ref; //HIER tritt sie jetzt auf
      dispose(p);
      Form1.K1_Z.caption := IntToStr(StrToInt(Form1.K1_Z.caption) - 1);
    end
    else Pausieren(400);
  end;
end;
Viele Grüße und danke schonmal
Riclem
  Mit Zitat antworten Zitat