Сводка номеров фатальных ошибок




Фатальные ошибки (табл. 14.2) всегда приводят к немедленной установке программы.

Таблица 14.2

  ОПИСАНИЕ ОШИБОК
  Division by zero (деление на ноль) ИСТОЧНИК: /, mod, div
  Range check error (ошибка в границах/диапазонах) ИСТОЧНИК: ошибка генерируется операторами, скомпилированными в состоянии {$R+}, при возникновении одной из следующих ситуаций: -индекс элемента массива вышел из описанного диапазона; -была осуществлена попытка присвоить переменной значение, находящееся вне диапазона значений типа переменной; -была попытка передать значение, находящееся вне допустимого диапазона, в качестве параметра процедуре или функции {311}
  Stack overflow error (переполнение стека) ИСТОЧНИК: вызов процедуры или функции, откомпилированной в режиме $S+, в случае, если нет достаточной области для размещения их локальных переменных. Надо увеличить размер стека, используя директиву компилятора $М
  Heap overflow error (переполнение кучи) ИСТОЧНИК: процедуры New или GetMem в случае, если нет достаточно свободного места в динамической области памяти, чтобы выделить память для блока требуемого размера
  Invalid pointer operation (неверная операция со ссылкой) ИСТОЧНИК: процедуры Dispose или FreeMem в случае, если их аргумент имеет значение nil или указывает на адрес, лежащий за пределами динамически распределяемой области, или если список свободных блоков переполнен
  Floating point overflow (переполнение при операции с плавающей точкой) ИСТОЧНИК: операция с плавающей точкой
  Floating point underflow (исчезновение порядка при операции с плавающей точкой) ИСТОЧНИК: операция с плавающей точкой. Эта ошибка генерируется только в случае, если используется математический сопроцессор 8087 с управляющим словом, которое демаскирует ошибки, возникающие при исчезновении порядка. По умолчанию исчезновение порядка приводит к возвращению результата, равного нулю
  Invalid floating point operation (недопустимая операция с плавающей запятой) ИСТОЧНИК: функции Trunc или Round, если их аргумент не может быть преобразован в целое число, находящееся в диапазоне значений типа LongInt (от -2147483648 до 2147483647). ИСТОЧНИК: функции Sqrt, если ее аргумент — отрицательный, и Ln, если аргумент — неположительный. ИСТОЧНИК: переполнение стека 8087. Надо упростить математическое выражение в программе или разбить его на части {312}
  Overlay manager not installed (не установлена подсистема управления оверлеями) ИСТОЧНИК: вероятнее всего — отсутствие обращения к процедуре OvrInit или неудачное обращение к этой процедуре. Нужно помнить, что если в каком-либо из оверлейных модулей содержится код инициализации, то нужно создать дополнительный неоверлейный модуль, вызывающий процедуру OvrInit, и использовать этот модуль перед любым из оверлейных модулей
  Overlay file read error (ошибка чтения оверлейного файла) ИСТОЧНИК: когда подсистема управления оверлеями пыталась считать оверлей из оверлейного файла, произошла ошибка чтения
  Object not initialized (объект не был инициализирован) ИСТОЧНИК: попытка вызова виртуального метода объекта, который не был ранее инициализирован вызовом конструктора. Эта ошибка генерируется, если программа создана в режиме компиляции $R+ {313}

Часть IV. СПЕЦИАЛЬНЫЕ

БИБЛИОТЕКИ ЯЗЫКА

Глава 15. Модуль CRT

Аббревиатура CRT будет расшифровываться по-русски как «электронно-лучевая трубка». И действительно, в модуле CRT реализованы специальные процедуры и функции для работы с текстовой информацией на дисплее, позволяющие: управлять текстовыми режимами, организовывать окна вывода на экран, настраивать цвета символов на экране, управлять курсором. Кроме того, в модуль включены функция опроса клавиатуры и процедуры управлений встроенным в ПЭВМ динамиком.

Несмотря на то, что модуль CRT реализует шестнадцать процедур и четыре функции, его размер составляет не более 3K. Его стандартное местонахождение — системная библиотека TURBO.TPL.

Для подключения модуля достаточно включить его в директиву USES в самом начале программы:

USES CRT;

Имеет смысл всегда подключать модуль CRT, даже если его процедуры или функции не используются в программе. Дело в том, что обычно процесс вывода информации на дисплей совершается по такой цепочке:

Оператор Write --> функция MS-DOS (вывод строки) --> подпрограмма BIOS --> --> (базовая система ввода-вывода --> видеопамять монитора.

При подключении модуля CRT из этой цепочки исключаются медленная функция MS-DOS и, как правило, подпрограмма БСВВ вследствие чего значительно повышается скорость вывода информации на дисплей. Понятно, что чем «медленнее» работает компьютер, тем заметнее будет эффект от подключения модуля CRT. Пользователи ПЭВМ класса PC/XT могут воочию увидеть разницу, запустив по очереди две программы показанные на рис. 15.1. {314}

{ Программа использует стандартный вывод } PROGRAM StandartOutput; VAR i: Byte; { счетчик цикла } BEGIN for i:=1 to 100 do Write('* Турбо Паскаль* '); WriteLn END. { Программа использует средства модуля CRT} PROGRAM CRT_Output; USES CRT; { подключение модуля CRT } VAR i: Byte; { счетчик цикла } BEGIN for i: = 1 to 100 do Write('* Турбо Паскаль* '); WriteLn END.

Рис. 15.1

Механизм подобного ускорения можно проиллюстрировать следующим образом. Существуют стандартные текстовые файлы: Input — для ввода и Output — для вывода информации. До тех пор пока программист или компилятор не предпримут каких-либо действий по их переназначению, они считаются связанными: Input — с клавиатурой, a Output — с дисплеем посредством функций MS-DOS. Все стандартные операторы ввода-вывода остаются связанными с этими файлами, т.е. оператор Write ('привет') эквивалентен оператору Write (Output, 'привет'), а оператор ReadLn(SomeString) соответственно эквивалентен оператору ReadLn(Input, SomeString).

При подключении модуля CRT перед выполнением основного блока программы происходит переназначение стандартных файлов, как если бы выполнились операторы:

AssignCRT(Input); { Связывается системный файл Input с }

{ фиктивным устройством CRT. }

Reset(Input); { открытие Input для ввода через CRT }

AssignCRT(Output);{ Здесь связывается системный файл }

{ Output с фиктивным устройством CRT.}

Rewrite(Output); { Файл Output открывается для вывода.}

Процедура AssignCRT из модуля CRT будет рассмотрена в разд. 15.4.8. Она аналогична по сути процедуре

Assign(логический файл, физический файл или устройство),

но связывает логический файл с фиктивным устройством CRT. {315}

Переназначение на CRT происходит автоматически, и нет нужды вставлять операторы в текст программы. Они выполняются при подключении модуля CRT.

Если же по каким-либо причинам пользователь хочет восстановить стандартную связь файлов Input и (или) Output, т.е. отказаться от «услуг» подключенного модуля CRT, то в его программе должны быть следующие операторы:

Assign(Input, ' '); { Файл Input связывается со стандарт-}

{ ным устройством ввода (чтения). }

Reset (Input); { Файл Input открывается для чтения. }

Assign (Output, ' '); {Файл Output связывается со стандарт-}

{ ным устройством вывода (записи). }

Rewrite(Output); { Файл Output открывается для записи.}

Пустая строка в операторе Assign означает стандартное предопределенное устройство, как правило устройство CON.

Кроме ускорения вывода информации на дисплей, подключение модуля CRT вносит ряд дополнений и расширений в работу стандартных процедур Write, WriteLn, Read и ReadLn.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: