> -- Пётр Кушнир писал(а):
> код покажете?
## Код:
```
MODULE List;
   
   IMPORT  Out;
   
   TYPE
      List = POINTER TO RECORD
         prev, next: List;
      END;
      
   VAR 
      list: List;
      creates: ARRAY 2 OF PROCEDURE (l: List): List;
      
   PROCEDURE CreateSingle(l: List): List;
   BEGIN
      NEW(l.next);
      RETURN l.next
   END CreateSingle;

   PROCEDURE CreateDouble(l: List): List;
   BEGIN
      NEW(l.next);
      l.next.prev := l;
      RETURN l.next
   END CreateDouble;

   PROCEDURE NewList(count: INTEGER; create: PROCEDURE (l: List): List): List;
      VAR l, n: List;
   BEGIN
      NEW(n);
      l := n;
      WHILE count > 0 DO
         l := create(l); 
         DEC(count)
      END;
      Out.String("Ok"); Out.Ln;
      RETURN n
   END NewList;
   
   PROCEDURE Do*(method, count: INTEGER);
   BEGIN
      list := NIL;
      list := NewList(count, creates[method MOD 2]);
   END Do;

BEGIN
   creates[0] := CreateSingle;
   creates[1] := CreateDouble;
END List.

"List.Do(1, 10000000)"
```

Эксперименты показали, что выбор метода создания списка не влияет на освобождение памяти. Приложение затормаживается и самостоятельно не отдаёт память и так и так. Я чего-то не учитываю или ошибся?