Runtime 216 TurboPascal a FPC

0

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;
0
216 General Protection fault
    The application tried to access invalid memory space. This can be caused by several problems:

       1. Deferencing a nil pointer
       2. Trying to access memory which is out of bounds (for example, calling move with an invalid length).

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