Программа завершается раньше времени ,не работает dispose паскаль
uses
Crt;
type
Node = record
valuev:real;
next:^Node;
prev:^Node;
end;
var
header:^Node;
NewNode:^Node;
curNode:^Node;
command:integer;
procedure Create_List(List:^Node);
var flag:boolean = True;
begin
writeln('Введите первый элемент');
Read(List^.valuev);
List^.prev:= nil;
List^.next:= nil;
curNode:=List;
while (flag) do
begin
writeln('Хотите ввести новый элемент?(True если да ,False если нет)');
Read(flag);
if (flag) then
begin
New(NewNode);
curNode^.next:= NewNode;
Read(NewNode^.valuev);
NewNode^.prev:=curNode;
NewNode^.next:= nil;
curNode:= NewNode
end;
end;
end;
procedure write_List(List:^Node);
var flag:Boolean = True;
begin
curNode:= List;
while(flag)do
begin
if(curNode^.next <> nil) then
begin
write(curNode^.valuev,' ');
curNode:= curNode^.next;
end
else
begin
flag:=False;
writeln(curNode^.valuev);
writeln('');
end;
end;
end;
procedure delete_List(List:^Node);
var promvalue:^Node;
begin
curNode:=List;
while(curNode^.next <> nil) do
begin
promvalue:= curNode^.next;
dispose(curNode);
curNode:= promvalue;
end;
dispose(promvalue);
dispose(curNode);
end;
begin
New(header);
while true do
begin
writeln('Выберите команду');
writeln('1 Создать список');
writeln('2 распечатать список');
writeln('3 Удалить весь список');
writeln('4 Вставить элемент');
writeln('5 Удалить выбранный элемент');
Read(command);
ClrScr;
case command of
1:Create_List(header);
2:write_List(header);
3:delete_List(header);
else writeln('Чаво? ');
end;
end;
end.
Пытаюсь сделать двусвязный список ,с некоторым функционалом ,но почему-то функция удаления всего списка не удаляет список ,т.е при повторном выведении списка ничего не меняется и даже ошибки не выдаёт, помимо этого эта функция завершает программу. Что я не так сделал?
Источник: Stack Overflow на русском