kiedyś robiłe program w kórym był obiekt stos nie wiadomo czemu program sie dobrze kompilował , ale przy czyszeniu stosu wystepował błąd przy funkcji Dispose... nie wiem jak to zrobilem ale ten bład przestał sie pokzaywać i wszystko było ok...to bylo w Turbo Pascalu 7 ...teraz ten sam program prubuje uruchomic w FPC i nie wiadomo czemu wyskakuje błąd "Runtime 216" i tam 5 adresów jest podanych nie wiem o co chodzi ..program nie pokazuje mi na zdną linjke w kodzie..
Type
wskaznik=^Tlista; {wskaznik do rekordu}
Tlista= record {rekord skada sie z stringu}
str:string;
wsk: wskaznik; {i wskaznika do nast©pnego rekordu}
end;
Tstos=object {twrzymy objekt stos}
glowa:wskaznik; {wskaznik do pierwszego rekordu}
aktu:string; {zeby bylo szybciej jest tu zawartu aktualnie badany string}
aktuw:wskaznik; {wskazniki do aktalnego recordu}
procedure dodaj_glowe(s:string); {ustawia pierwszy wskaznik}
procedure dodaj(s:string); {dodaje s na koncu stosu}
procedure nast; {przechodzi do nast©pnego rekordu (aktu)}
procedure sort(s:string); {dodaje s odrazu sortujac liste alfabetycznie}
procedure reset; {ustawia aktu na glowe}
procedure czysc; {czysci caly stos}
end;
procedure Tstos.dodaj_glowe(s:string);
begin
if glowa=nil then {jezeli glowa jest pusta}
begin
New(glowa);
glowa^.str:=s;
glowa^.wsk:=nil;
aktu:=s; {ustaw aktu na s}
aktuw:=glowa; {ustaw aktuw na glowe}
end;
end;
procedure Tstos.dodaj(s:string);
var
Nowy,pop:wskaznik;
begin
if glowa =nil then {jezeli glowa jest pusta}
dodaj_glowe(s)
else {jezeli nie}
begin
pop:=glowa; {ustaw na poczatku na glowe}
while pop^.wsk <> nil do {przejdz na sam koniec}
pop:=pop^.wsk;
new(Nowy); {utworz nowy record}
Nowy^.str:=s;
Nowy^.wsk:=nil;
pop^.wsk := Nowy; {wskaznik do nowego recordu przypisz ostatniemu na stosie}
end;
end;
procedure Tstos.nast;
begin
aktuw:=aktuw^.wsk; {ustaw aktuw na nastepny}
aktu:=aktuw^.str; {aktu ustwa na str aktualnego recordu}
end;
procedure Tstos.reset;
begin
aktuw:=glowa; {ustaw aktw na glowe}
aktu:=glowa^.str; {ustaw aktu na str glowy}
end;
procedure Tstos.czysc;
var
us:wskaznik;
begin
while glowa<>nil do {gopuki glowa nie bedzie pusta}
begin
us:=Glowa^.wsk; {zapamietaj nastepny wskaznik}
Dispose(Glowa); {usun glowe}
Glowa:=us; {glowe ustaw na nastepny wskaznik}
end;
end;
procedure Tstos.Sort(s:string);
var
Nowy,pop:wskaznik;
begin
if glowa =nil then {jezeli glowa jest pusta}
dodaj_glowe(s)
else {jezeli nie}
begin
New(Nowy); {utworz nowy wskazninik}
nowy^.str:=s;
if glowa^.str >s then {jezeli s weglog alfabetu powino byc pierwsze}
begin
Nowy^.wsk:=glowa; {to nowy zapamieta adres do pierwszego wskaznika}
glowa:=Nowy; {i sam bedzie glowa}
end
else
begin
pop:=glowa; {jezeli glowa ma zostac}
while (pop^.wsk <> nil) do {to szukaj do konca listy}
if (pop^.wsk^.str>s)then break { takiego co powinien byc przed s lub jest koniec}
else
pop:=pop^.wsk;
if pop^.wsk=nil then {jezeli to jest koncowy wskaznik}
Nowy^.wsk:=nil {nowego wskaznik do nast bedzie pusty}
else
Nowy^.wsk:=pop^.wsk; {jezeli nie to ustaw go na wskzanik do pop }
pop^.wsk:=Nowy; {a poprzedniego ustaw na nowy};
end;
end;
end;