Турбо отладчик (Turbo Debugger) 3.0

Вы смотрите на первый элемент


       лается Parm.  Вы смотрите на первый элемент списка, и его строко-
       вые данные уже повреждены.  Если вы нажмете клавишу Esc,  стрелку
       вниз,  а затем снова клавишу Enter, то вы откроете окно Inspector
       (Проверка) для второго узла (элемента)  списка.  Нажмите  клавишу
       Enter, чтобы проверить строковые данные. Они не запорчены, факти-
       чески,  на тот же узел ссылается указатель Tail. Очевидно, что-то
       не так с концом строковых данных.
            Следите за окном Watch,  когда вы используете клавишу F7 для
       выполнения  цикла.  На  строке  199  содержится  вызов  процедуры
       GetMem, перед этим вызовом Tail^.Parm^ равно первому символу. Не-
       посредственно после вызова GetMem последний символ  в Tail^.Parm^
       уничтожается.
            Что происходит?  Для  каждого  параметра  командной строки в


       цикле for сначала выделяется запись,  затем строковые данные, за-
       тем следующая запись и т.д. При вызове GetMem на строке 198 долж-
       но выделяться достаточно памяти для строки, плюс байта длины, но,
       как можно заметить, к Length(s) не прибавляется 1. Хотя на строке
       199 строка успешно копируется,  для нее на самом деле выделено на
       1 байт меньше,  чем она использует.  Таким образом, первый символ
       строки перекрывается первым байтом следующей  записи,  выделенной
       при обращении к процедуре New(Temp).  Последний параметр остается
       незапорченным, так как на ним не следует другая ParmRec.
            Это все известные нам ошибки в программе.  Возможно  при  ее
       выполнении вы найдете какие-то еще. Вы можете исправить эти ошиб-
       ки, а затем перекомпилировать программу (для удобства они отмеча-
       ются  двумя звездочками (**)),  или запустить TPDEMO.EXE - версию
       программу, о которой рассказывалось в Главе 3 и в  которой ошибок
       нет.

       TDeb 3.0 #2-3               = 162 =
       Глава 15. Виртуальная отладка с использованием процессора 80386

Содержание раздела