Lista jednokierunkowa i błąd AccessViolation przy dodawaniu nowego węzła

Odpowiedz Nowy wątek
2016-01-17 20:13
0

Robię program na podstawie http://4programmers.net/Delphi/Lista_jednokierunkowa. Podczas uruchamiania wyskakuje błąd Access Violation, a w logach wyskakuje brak dostępu do zmiennych. Co jest tego przyczyną? Niżej kod, połączony z błędem.

constructor Moja.Create;
begin
  inherited Create();
  FFirst := nil;
  FLast := nil;
  FCount := 0;
end;

{=================}

procedure Moja.Add(xxx : dane);
var
  NewOne : wsk;
begin
  NewOne := CreateElement(xxx);

  if FFirst = nil then   {<--- przy tej linijcie wyskakuje bląd}
  begin
    FFirst := NewOne;
    FLast := FFirst;
  end
  else
  begin
    FLast^.Next := NewOne;
    FLast := NewOne;
  end;

  Inc(FCount);
end;

{==================}

function Moja.CreateElement(AData:Dane) : wsk;
begin
  New(Result);
  Result^.Next := nil;
  Result^.Data := AData;
end;

user image

edytowany 1x, ostatnio: Items_, 2016-01-17 20:18

Pozostało 580 znaków

2016-01-17 20:21
1
var m:Moja;
var d:Dane; // może też wymagają create - nie opisałeś.

m:=Moja.Create();
m.Add(d);

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Dzięki wielkie, to było to :) - Items_ 2016-01-19 02:14

Pozostało 580 znaków

2016-01-17 21:21

@Items_ - we wskazanej linijce raczej nie może polecieć wyjątek, bo to tylko i wyłącznie porównanie adresu obiektu z wartością Nil; Więc bez względu na wartość pola FFirst, wyjątek nie ma prawa być rzucony - to wygląda jak błąd debugera;

Pokaż lepiej deklarację tego Moja, bo nie może tak być, żeby w poziomu metody nie było dostępu do pola tej samej klasy, jeśli i metoda i to pole zadeklarowane są w klasie tego samego typu;

var d:Dane; // może też wymagają create - nie opisałeś.

Nawet jeśli obiekt nie zostanie utworzony to w parametrze przekaże Nila, który będzie się dało przechowywać w nowym węźle listy; Problem w tym, że jeszcze przy dodawaniu leci wyjątek, czyli zanim w ogóle coś się z tymi danymi zacznie robić (czyli zanim się je pobierze i użyje).


edytowany 5x, ostatnio: furious programming, 2016-01-17 21:26

Pozostało 580 znaków

2016-01-17 21:24
1
furious programming napisał(a):

... Więc bez względu na wartość pola FFirst, wyjątek nie ma prawa być rzucony ...
Może być jeżeli Self=nil


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
A żesz, fakt - za mocno skupiłem się za tym Dane - furious programming 2016-01-17 21:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0