Копирование из списка в массив

Есть двусвязный список с вносимыми в него данными простым вводом чисел
type  plist = ^tlist;  tlist = record          data : ******;          next, prev : plist;  end;  p2list = ^plist;  procedure Add (list : p2list; d : ******);var  l : plist;begin   if list^ = nil then   begin      ******** (list, d);      exit   end;    New (l);   l^.data := d;   l^.prev := list^;   l^.next := list^^.next;   (list^)^.next := lend;
Нужно перенести дынные из списка который тоже выводится на экран по процедуре
procedure Display (list : plist);var  p : plist;begin  if list = nil then     writeLn ('Spisok pust')  else  begin    p := list;     while p^.prev <> nil do       p := p^.prev;     while p <> nil do    begin       if p = list then         write ('*');       write (p^.data, #32);       p := p^.next;    end;  end;end;
в массив.. Делаю вот так
type mass=array[1..100] of ******;procedure PerenosIsSpiskavMassiv (list : plist;var a:mass;var n:byte);//передаем в программу созданный массив и его размер, мы же заранее можем и не знать сколько //элементов в спискеvar  p : plist;  i:integer;begin   if list = nil then     writeLn ('Spisok pust')  else    begin     p := list;    { "перематываем" список, что бы list стал последним элементом }        n:=0;    while p^.next <> nil do      begin             n:=n+1;         p := p^.next;         a[n]:=p^.data;         writeln(a[n]:0:2,' ');         end;   end;
И рохоже какая-то ошибка в цикле, 
while p^.next <> nil do
Компилируется, но не выводит на экран ничего, даже просто добавив строку writeln('Privet') ничего не происходит. Добавив до цикла, всё ок. Где проблема или копирование из списка в массив по другому делается?
1 ответ

а как задача будет звучать?Заполнить один двусвязный список, скопировать его содержимое в массив и вывести массив на экран?Зачем двусвязный список?Мне кажется, что пример не работает, потому что список криво заполнен. Если вы хотите передать переменную, хранщую указатель на голову списка в процедуру, то в процедуре надо бы было написать:
procedure Add (var list : plist; d : ******);
не вижу смысла в существовании p2list