lista jednokierunkowa - gdzie mam blad??

0

Program powinien wypisac imiona żeńskie z pliku, ale jak na razie w ogóle mi nie dziala :/

program imiona; 
uses crt;
type Posoba=^Tosoba;
     Tosoba=record
     imie:^string;
     nast:Posoba;
     end;

var plik:text;
    s:string;
    poc:Posoba;

procedure wypisz(lista:Posoba);
 var p:Posoba;
 begin
  p:=lista;
  while p<>nil do
  begin
   if p^.imie^[length(p^.imie^)]='a' then write(p^.imie^);
   p:=p^.nast;
  end;
 end;

procedure dodaj(var lista:Posoba; s:string);
 var p:Posoba;
 begin
  new(p);
  GetMem(p^.imie,length(s)+1);
  p^.imie:=s;            <-----------------w tym miesjcy wskazuje mi blad          
  p^.nast:=lista;
  lista:=p;
 end;

procedure usun(var lista:Posoba);
 var p:Posoba;
 begin
  while lista<>nil do
  begin
   p:=lista;
   lista:=lista^.nast;
   FreeMem(p^.imie,length(p^.imie^)+1);
   dispose(p);
  end;
 end;

begin
 poc:=nil;
 assign(plik,'d:\imiona.txt');
 reset(plik);
 while not eof(plik) do
 begin
  readln(plik,s);
  dodaj(poc,s);
 end;
 wypisz(poc);
 usun(poc);
 close(plik);
readkey;
end.

Z gory wielkie dzieki za pomoc.

0

co to i po co to imie:^string;

0

rzaczywiscie nie zwrocilam uwagi na to :) - powinno byc bez ^

ale i tak mi nie dziala, co jeszcze jest tu zle, bo dopiero sie ucze list jednokierunkowych i nie wiem za bardzo jak to poprawic

0

to
GetMem(p^.imie,length(s)+1);
i to
FreeMem(p.imie,length(p.imie^)+1);
jest niepotrzebne - string sobie sam poradzi z przydziałem pamięci

napisz jaki błąd

0

Dzieki :) juz dziala.

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