сделал пример из 4-х простеньких модулей:
## Код:
```
МОДУЛЬ ПримерЖивность;
   ТИП
      Описание* = УКАЗАТЕЛЬ ДО МАССИВ ИЗ  ЛИТЕР;
      
      Живность* = УКАЗАТЕЛЬ ДО АБСТРАКТНАЯ ЗАПИСЬ
         имя*: Описание; (*Описание;*)
         описание*: Описание; 
      КОНЕЦ;

ПРОЦЕДУРА (эта_живность:Живность) описать*(): Описание, НОВЫЙ ;
   ПЕРЕМЕННЫЕ
   описание: Описание;
НАЧАЛО
   НОВЫЙ (описание, 40);
   описание^:= эта_живность.имя + эта_живность.описание;
   ВЕРНУТЬ описание;
КОНЕЦ описать;   

КОНЕЦ ПримерЖивность.
```

## Код:
```
МОДУЛЬ ПримерЗверь;
   ПОДКЛЮЧИТЬ  ПримерЖивность;
   ТИП
   
      Зверь* = УКАЗАТЕЛЬ ДО ЗАПИСЬ (ПримерЖивность.Живность)
      КОНЕЦ;   
(*   ПРОЦЕДУРА новый_зверь*( наименование: ПримерЖивность.Описание): Зверь; *)
ПРОЦЕДУРА новый_зверь*( наименование: МАССИВ ИЗ  ЛИТЕР): Зверь;
   ПЕРЕМЕННЫЕ
         этот_зверь: Зверь;
   НАЧАЛО
      НОВЫЙ (этот_зверь);
      этот_зверь.описание^:= "бегает"; 
      этот_зверь.имя^ := наименование$; 
      ВЕРНУТЬ этот_зверь;   
   КОНЕЦ новый_зверь;
   
НАЧАЛО
КОНЕЦ  ПримерЗверь.
```

## Код:
```
МОДУЛЬ ПримерПтица;
   ПОДКЛЮЧИТЬ  Вывод := i21eduВывод, ПримерЖивность;
   ТИП
      Птица* = УКАЗАТЕЛЬ ДО ЗАПИСЬ (ПримерЖивность.Живность)
      КОНЕЦ;   
ПРОЦЕДУРА новая_птица*( наименование: МАССИВ ИЗ  ЛИТЕР): Птица;
   ПЕРЕМЕННЫЕ
      эта_птица: Птица;
   НАЧАЛО
      Вывод.Цепочка( "отметка-1" );
      НОВАЯ (эта_птица);
      эта_птица.описание^:= "летает"; 
      эта_птица.имя^ := наименование$; 
      ВЕРНУТЬ эта_птица;   
   КОНЕЦ новая_птица;
```

## Код:
```
МОДУЛЬ Пример;
   ПОДКЛЮЧИТЬ  Вывод := i21eduВывод, 
      ПримерЖивность, ПримерПтица, ПримерЗверь;
   КОНСТАНТЫ
      количество_живности = 4;  (*пусть будут ворона, собака, лиса, ястреб*)
   ПЕРЕМЕННЫЕ
      список_живности : УКАЗАТЕЛЬ ДО МАССИВ ИЗ ПримерЖивность.Живность;
      i : INTEGER;
      текст: УКАЗАТЕЛЬ ДО МАССИВ ИЗ ЛИТЕР;
   
ПРОЦЕДУРА описать_живность*();
  ПЕРЕМЕННЫЕ 
  НАЧАЛО
   НОВЫЙ (список_живности, количество_живности + 1);
   Вывод.Цепочка( "отметка-0"); 
   список_живности [0]:= ПримерПтица.новая_птица("Ворона");
   список_живности [1]:= ПримерЗверь.новый_зверь("Собака");   
   список_живности [2]:= ПримерЗверь.новый_зверь("Лиса");   
   список_живности [3]:= ПримерПтица.новая_птица("Ястреб");
   ДЛЯ i :=0  ДО количество_живности-1 ДЕЛАТЬ
         текст:=список_живности[i].описать();
         Вывод.Цепочка( текст ); Вывод.НовСтрока;
   КОНЕЦ;   
   список_живности:= ОТСУТСТВУЕТ;
   КОНЕЦ описать_живность;

НАЧАЛО
   
КОНЕЦ Пример.
```


Запускаю Пример.описать_живность()
получаю трап: NIL dereference (read)
понимаю
в "отметку-0" попадает
в "отметку-1" ― нет
1)Помогите разобраться - почему?
2)Помогите разобраться как грамотно пользоваться трапом. Для меня это ―  по сути артефакт.

сам трап:
## Код:
```
NIL dereference (read)

 ПримерПтица.новая_птица   [0000005EH] 
   .наименование   ARRAY 7 OF CHAR   "Ворона"
   .эта_птица   ПримерПтица.Птица   [0101C090H] 
 Пример.описать_живность   [0000003FH] 
 StdInterpreter.CallProc   [000003A5H] 
   .a   BOOLEAN   FALSE
   .b   BOOLEAN   FALSE
   .c   BOOLEAN   FALSE
   .i   Meta.Item   поля
   .imported   ARRAY 256 OF CHAR   ""   ...
   .importing   ARRAY 256 OF CHAR   ""   ...
   .mn   Meta.Name   "Пример"
   .mod   StdInterpreter.Ident   "Пример"
   .object   ARRAY 256 OF CHAR   ""   ...
   .ok   BOOLEAN   TRUE
   .parType   INTEGER   0
   .pn   Meta.Name   "описать_живность"
   .proc   StdInterpreter.Ident   "описать_живность"
   .res   INTEGER   0
   .v   StdInterpreter.ProcVal   поля
   .vi   StdInterpreter.ProcIVal   поля
   .vii   StdInterpreter.ProcIIVal   поля
   .vr   StdInterpreter.ProcRVal   поля
   .vri   StdInterpreter.ProcRIVal   поля
   .vrii   StdInterpreter.ProcRIIVal   поля
   .vrr   StdInterpreter.ProcRRVal   поля
   .vrri   StdInterpreter.ProcRRIVal   поля
   .vrrii   StdInterpreter.ProcRRIIVal   поля
   .vrs   StdInterpreter.ProcRSVal   поля
   .vrsi   StdInterpreter.ProcRSIVal   поля
   .vrsii   StdInterpreter.ProcRSIIVal   поля
   .vs   StdInterpreter.ProcSVal   поля
   .vsi   StdInterpreter.ProcSIVal   поля
   .vsii   StdInterpreter.ProcSIIVal   поля
   .vsr   StdInterpreter.ProcSRVal   поля
   .vsri   StdInterpreter.ProcSRIVal   поля
   .vsrii   StdInterpreter.ProcSRIIVal   поля
   .vss   StdInterpreter.ProcSSVal   поля
   .vssi   StdInterpreter.ProcSSIVal   поля
   .vssii   StdInterpreter.ProcSSIIVal   поля
 StdInterpreter.Command   [00001260H] 
   .left   StdInterpreter.Ident   "Пример"
   .ptype   INTEGER   0
   .right   StdInterpreter.Ident   "описать_живность"
 StdInterpreter.CallHook.Call   [00001385H] 
   .ch   CHAR   0X
   .e   ARRAY 64 OF CHAR   ""   ...
   .errorMsg   ARRAY 2 OF CHAR   " "
   .f   ARRAY 64 OF CHAR   ""   ...
   .g   ARRAY 64 OF CHAR   ""   ...
   .hook   StdInterpreter.CallHook   [0105FE50H] 
   .i   INTEGER   24
   .i0   INTEGER   0
   .i1   INTEGER   0
   .id   StdInterpreter.Ident   "описать_живность"
   .par0   Dialog.String   ""   ...
   .par1   Views.Title   ""   ...
   .proc   ARRAY 256 OF CHAR   "Пример.описать_живность"   ...
   .res   INTEGER   0
   .s0   Dialog.String   ""   ...
   .s1   Dialog.String   ""   ...
   .type   INTEGER   3
   .x   INTEGER   0
 Dialog.Call   [00003401H] 
   .errorMsg   ARRAY 2 OF CHAR   " "
   .proc   ARRAY 256 OF CHAR   "Пример.описать_живность"   ...
   .res   INTEGER   0
 DevCommanders.Execute   [00000662H] 
   .beg   INTEGER   1343
   .cmd   Dialog.String   "Пример.описать_живность"   ...
   .end   INTEGER   1345
   .pos   INTEGER   1319
   .res   INTEGER   0
   .s   DevCommanders.Scanner   поля
   .t   TextModels.Model   [0119C4E0H] 
   .unload   BOOLEAN   TRUE
 DevCommanders.Track   [00000795H] 
   .buttons   SET   {2, 16, 25}
   .c   Models.Context   [011A22A0H] 
   .end   INTEGER   1345
   .f   Views.Frame   [010DC510H] 
   .h   INTEGER   123825
   .in   BOOLEAN   TRUE
   .in0   BOOLEAN   TRUE
   .isDown   BOOLEAN   FALSE
   .m   SET   {2, 25}
   .v   DevCommanders.View   [011A2270H] 
   .w   INTEGER   149225
   .x   INTEGER   88900
   .y   INTEGER   41275
 DevCommanders.StdView.HandleCtrlMsg   [00000946H] 
   .f   Views.Frame   [010DC510H] 
   .focus   Views.View   NIL
   .msg   Controllers.TrackMsg   поля
   .v   DevCommanders.StdView   [011A2270H] 
 Views.ForwardCtrlMsg   [000026B0H] 
   .a   Views.View   NIL
   .f   Views.Frame   [010DC510H] 
   .focus   Views.View   NIL
   .g   Views.Frame   [011A38C0H] 
   .h   Views.Frame   NIL
   .msg   Controllers.TrackMsg   поля
   .op   INTEGER   0
   .req   BOOLEAN   FALSE
   .v   Views.View   [011A2270H] 
 Views.ForwardCtrlMsg   [0000276BH] 
   .a   Views.View   NIL
   .f   Views.Frame   [011A38C0H] 
   .focus   Views.View   [011A2270H] 
   .g   Views.Frame   [011A3530H] 
   .h   Views.Frame   [010DC510H] 
   .msg   Controllers.TrackMsg   поля
   .op   INTEGER   0
   .req   BOOLEAN   FALSE
   .v   Views.View   [0119C480H] 
 Views.ForwardCtrlMsg   [0000276BH] 
   .a   Views.View   NIL
   .f   Views.Frame   [011A3530H] 
   .focus   Views.View   [0119C480H] 
   .g   Views.Frame   NIL
   .h   Views.Frame   [011A38C0H] 
   .msg   Controllers.TrackMsg   поля
   .op   INTEGER   0
   .req   BOOLEAN   FALSE
   .v   Views.View   [0119C2C0H] 
 Windows.Window.ForwardCtrlMsg   [000002AFH] 
   .msg   Controllers.TrackMsg   поля
   .w   Windows.Window   [011A2FD0H] 
 HostWindows.Window.ForwardCtrlMsg   [00001615H] 
   .d   BOOLEAN   FALSE
   .msg   Controllers.TrackMsg   поля
   .res   INTEGER   2010354855
   .w   HostWindows.Window   [011A2FD0H] 
 HostWindows.Window.MouseDown   [00001BA5H] 
   .modifiers   SET   {2, 16, 25}
   .ph   INTEGER   392
   .pw   INTEGER   656
   .time   INTEGER   0
   .track   Controllers.TrackMsg   поля
   .w   HostWindows.Window   [011A2FD0H] 
   .x   INTEGER   16
   .y   INTEGER   366
 HostWindows.HandleMouse   [00003445H] 
   .b   SET   {2, 16, 25}
   .f   Views.Frame   NIL
   .g   Views.Frame   NIL
   .isDown   BOOLEAN   TRUE
   .lParam   INTEGER   23986192
   .w   HostWindows.Window   [011A2FD0H] 
   .wParam   INTEGER   265
   .wnd   INTEGER   262810
   .x   INTEGER   16
   .y   INTEGER   366
 Kernel.Try   [00003A31H] 
   .a   INTEGER   262810
   .b   INTEGER   265
   .c   INTEGER   23986192
   .h   PROCEDURE   HostWindows.HandleMouse
 HostWindows.DocWinHandler   [00003FB2H] 
   .dx   INTEGER   0
   .dy   INTEGER   0
   .lParam   INTEGER   23986192
   .message   INTEGER   513
   .res   INTEGER   0
   .st   SET   {5}
   .style   SET   {2, 3, 8, 9, 11..15, 17, 21}
   .w   HostWindows.Window   NIL
   .wParam   INTEGER   9
   .wnd   INTEGER   262810
   .x   INTEGER   16064144
<system>   (pc=77D38708H,  fp=0022FB84H)
<system>   (pc=77D387EAH,  fp=0022FBECH)
<system>   (pc=77D389A4H,  fp=0022FC4CH)
<system>   (pc=77D3BCCBH,  fp=0022FC5CH)
 HostMenus.Loop   [00003C86H] 
   .done   BOOLEAN   FALSE
   .f   SET   {0..5}
   .n   INTEGER   0
   .res   INTEGER   0
   .w   HostWindows.Window   NIL
 Kernel.Start   [00002B5CH] 
   .code   PROCEDURE   HostMenus.Loop
```
