Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2012, 06:31   #1
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
Злость Списки с указателями Delphi, ОШИБКА!!!

К примеру имеем список двойной степени вложенности
мебель
**** стол
машина
**** легковая
собака
****такса

Удаляем эл-ты поочереди начиная с 1-го, когда удаляю последний выкидывает ошибку!!! Как не пытылся никак немогу разобраться как от нее избавится!!! Исправьте кто может!!!

Вот кусок кода:
Код:
program Slovarik_probnij;

{$APPTYPE CONSOLE}

uses
  SysUtils;

TYPE
  Ukazatel=^LIST;
  LIST=Record
    termin:string;
    next:Ukazatel;
    sub:Ukazatel;
  end;

VAR
  term_list,Head:Ukazatel;
  term_dop,term_sub,term_podsub:string;
  
PROCEDURE DelAllSub(st:Ukazatel);
 Var
    y,dy:Ukazatel;
 BEGIN
   IF st<>nil Then
    Begin
      y:=st;
      While y<>nil do
        Begin
           IF y=st Then
             Begin
               dy:=y;
               st:=st^.next;
               Dispose(y);
               y:=st;
             End
           Else
             Begin
               dy:=y;
               dy^.next:=y^.next;
               Dispose(y);
               y:=dy^.next;
             End;
           y:=dy;
           y:=y^.next;
        End;
    End;
 END;

{ПРОЦЕДУРА УДАЛЕНИЯ ТЕРМИНА}
PROCEDURE Del_term(term_pr:string);
  Var
    x: UKAZATEL ;
  BEGIN
    term_list:=Head;
    x:=term_list;
    While x<>Nil do
      IF x^.termin=term_pr Then
        Begin
         IF x=Head Then
          Begin
            DelAllSub(term_list^.sub);
            term_list:=term_list^.Next;
            Dispose(x);
            x:=term_list;
            Head:=term_list;
          End
         Else
          Begin
            DelAllSub((term_list^.next)^.sub);
            term_list^.Next:=x^.Next;
            Dispose(x);
            x:=term_list^.Next;
          End
        End
      Else
        Begin
          term_list:=x;
          x:=x^.Next;
        End;
    Writeln('Teper dannij termin udalen');
    Writeln;
 END;
<----Весы Там.
Npwas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки с указателями!!! Ошибка!!!(Delphi) Npwas Помощь студентам 0 15.04.2012 22:25
Списки с указателями,исправьте ошибку!(Delphi) Npwas Помощь студентам 0 14.04.2012 22:36
Списки с указателями!(Delphi) Npwas Помощь студентам 2 27.03.2012 13:32
Списки с указателями, как пользоватьс?(Delphi) Npwas Помощь студентам 0 26.03.2012 13:27
Работа с указателями. Ошибка сегментации. agronomchek Помощь студентам 1 24.08.2010 14:51