Umieszczanie danych na listę jednokierunkową przez naciśniecie przycisku

0

Witam,
muszę napisać pewien program który umieszcza dane wpisywane przez użytkownika w komponencie TEdit na listę jednokierunkową i wyświetla ją w komponencie TListView, po naciśnięciu przycisku. Tak wygląda mój kod:

 
//deklaracja listy 
 Plista = ^lista;
  lista = record
    nr: integer;
    nazwa: String[30];
    cena: real;
    dzial: String[30];
    nastepny: Plista;
  end;

...

procedure TForm6.Btn_dodajClick(Sender: TObject);
var
item: TListItem;
head: Plista;
p,e: Plista;
i:integer;
begin

  //dodanie nowego elementu na koniec listy
 new(e);
 e^.nastepny := nil;
 e^.nazwa := E_nazwa.Text;
 e^.nr := StrToInt(E_nr.Text);
 e^.cena := StrToFloat(E_cena.Text);
 e^.dzial := E_dzial.Text;
 p := head;
  if p=nil then
     head := e
  else
   begin
     while p^.nastepny<>nil do p:=p^.nastepny;
      p^.nastepny := e;
   end;

 // dodaj rekord do komponentu
 item := ListView.Items.Add;
 item.Caption := e.nazwa;
 item.SubItems.Add(IntToStr(e.nr));
 item.SubItems.Add(FloatToStr(e.cena));
 item.SubItems.Add(e.dzial);
 //czyszczenie okien TEdit
 E_nazwa.Clear;
 E_nr.Clear;
 E_cena.Clear;
 E_dzial.Clear;
end;

Program się kompiluje, ale przy wpisaniu danych i naciśnięciu przycisku dodaj wyskakuje błąd: access violation at "adres pamięci": read of address "inny adres". Co robię źle ?

0

Powinieneś przechowywać adres ostatniego elementu listy w zmiennej - zaoszczędziłbyś czasu na każdorazowym szukaniu ostatniego elementu przy dodawaniu nowych, a tak to za każdym razem przejeżdżasz całą listę tracąc sporo czasu;

Problemem jest tworzenie nowego itema listy:

 // dodaj rekord do komponentu
 item := ListView.Items.Add;
 item.Caption := p.nazwa;
 item.SubItems.Add(IntToStr(p.nr));
 item.SubItems.Add(FloatToStr(p.cena));
 item.SubItems.Add(p.dzial);

Nigdzie nie odwołujesz się do wartości wskaźnika p - dlatego się sypie; Dodaj operator ^ do każdego p w powyższych instrukcjach; A najlepiej to kopiuj tekst bezpośrednio z komponentów - unikniesz powtórnej dekonwersji.

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