Сообщение было отмечено theone как решение
Решение
theone
| Assembler | ||
|
При изменении делителя на 2 подключается знаковое деление(idiv).
При использовании longint подключается процедура:
| Assembler | ||
|
Ваше прерывание выглядит так:
| Assembler | ||
|
Но оно вызывает функцию @$brdiv$q7Longintt1, где используются 32-х битные регистры, ладно младшие 16-ть бит востанавливаются(куча push и pop вначале и в конце), но старшая часть регистра перезаписывается 18,2 раза в секунду(в прерывании), плюс ещё программа вносит свои изменения в цикле.
До тех пор, пока Вы не раскажите о хитрых ходах: a mod 1 = 0 и newtick div 1 смысла разговаривать нет.
Добавлено через 15 минут
Ваша программа выполненяет newtick div 1 в цикле и прерывается прерыванием и выполняя a mod 1 = 0 заходит в общую функцию, при этом портит сами регистры(старшую часть) именно это приводит к ошибке.
Я бы посоветовал использовать критические секции, но в этом паскале/ассемблере, кроме как запрета прерываний ничего нет.
2
I’ve FreeDos OS installed on VirtualBox on a windows xp, dual core, host machine. I installed FreeDos because I wanted to run a Pascal code using Turbo Pascal. When I run the code, it throws error ‘Error 200: Division by zero.’. How can I solve this?
-Turbo Pascal 7.0, Free DOS 1.1, Virtual Box 4.3.6, Windows XP Service Pack 3 Host machine
-This error is unfortunately caused by fast Pentium CPUs and I found a patch on the internet that will resolve the error. (www.filewatcher.com/m/bp7patch.zip.62550-0.html) Now the other problem is, when i was tracing the code, it hangs at ‘RxWait procedure when trying to execute while not odd(port[RXTX + 5]) do;’
uses crt;
const
{ COM1: RS232 port address }
RXTX = $3F8; { $2F8 if COM2: is used }
ACK = 6;
NAK = 21;
ESC = 27;
var
dummy,
checkSum : integer;
key : char;
protocol : integer;
procedure InitComm;
{ Set baudrate to 9600, 8 bits, no parity, 1 stop bit }
var i : integer;
begin
i := 1843200 div 9600 div 16;
port[RXTX + 3] := $80;
port[RXTX + 1] := hi(i);
port[RXTX]:= lo(i);
port[RXTX + 3] := 3;
port[RXTX + 4] := $A;
while odd(port[RXTX + 5]) do
begin
dummy := port[RXTX];
delay(10);
end;
end; { InitComm }
procedure Tx(data : integer);
{ Transmit a character on serial channel }
begin
while port[RXTX + 5] and $20 = 0 do;
port[RXTX] := data and $FF;
end; { Tx }
function RxWait : integer;
{ Waits for a character from serial channel }
begin
while not odd(port[RXTX + 5]) do;
RxWait := port[RXTX];
end; { RxWait }
procedure Tx2(data : integer);
{ Transmit a char on serial channel + Calculate check sum }
begin
Tx(data);
checkSum := (checkSum + data) and $FF;
end; { Tx2 }
procedure TxCommand(c1, c2 : char;
sendCheckSum : boolean);
{ Transmit command (no data) on serial channel }
begin
Tx(ESC);
checkSum := 0;
Tx2(ord(c1));
Tx2(ord(c2));
if sendCheckSum then
begin
Tx2(checkSum);
dummy := RxWait;
end;
end; { TxCommand }
function ReadNumber(n : integer) : real;
{ Read n bytes from serial channel }
var
number: real;
i : integer;
begin
number := 0;
checkSum := 0;
for i := 1 to n do
number := number * 256 + RxWait;
dummy := RxWait;
ReadNumber := number;
end; { ReadNumber }
procedure Revisions;
var
tmp : integer;
sw,
prot : real;
begin
TxCommand('P', 'R', FALSE);
checkSum := 0;
tmp := RxWait;
sw := tmp + RxWait / 100.0;
protocol := RxWait;
prot := protocol + RxWait / 100.0;
dummy := RxWait;
tmp := RxWait;
writeln('Software revision: ', sw:4:2);
writeln('Protocol revision: ', prot:4:2);
end; { Revisions }
procedure ReadCountReg;
begin
TxCommand('R', 'C', FALSE);
writeln(ReadNumber(4):11:0, ' coins counted.');
dummy := RxWait;
end; { ReadCountReg }
procedure ReadAccReg;
begin
TxCommand('R', 'A', FALSE);
writeln(ReadNumber(4):11:0, ' coins in accumulator.');
dummy := RxWait;
end; { ReadAccReg }
procedure Setbatch(limit : longint);
begin
TxCommand('W', 'L', FALSE);
case protocol of
1 : begin
Tx2(limit div 256);
Tx2(limit mod 256);
end;
2 : begin
Tx2( limit div 16777216);
Tx2((limit div 65536) mod 256);
Tx2((limit div 256) mod 256);
Tx2( limit mod 256);
end;
end; { case protocol }
Tx2(checkSum);
dummy := RxWait;
end; { Setbatch }
┌─────────────────┐
│ Деление на нуль │
└─────────────────┘
Программа попыталась делить на нуль в «/», «mod» или «div» операциях.
Эта ошибка часто возникает при инициализации модуля CRT. На данный момент существуют разные способы исправления проблемы.
Нужно подчеркнуть, что самый распространённый патч всего лишь предотвращает возникновение ошибки 200. Процедура Delay после такого патча работает неправильно (длительность меньше указанной). В School Pak всё, как положено: никаких ошибок 200, а длительность Delay совпадает с заданной. Причём, программы, скомпилированные в School Pak, работают нормально не только в DOSBox, но и в NTVDM.
Скачать пропатченный CRT.TPU
CRT.TPU обычно находится внутри библиотеки TURBO.TPL. При большом желании вы можете извлекать и помещать обратно модули .TPU с помощью утилиты TPUMOVER. Мы, однако, решили не плодить путаницу и предоставляем для скачивания только TURBO.TPL целиком.
TURBO.TPL (SYSTEM.TPU + CRT.TPU + DOS.TPU + OVERLAY.TPU + PRINTER.TPU) (отдельно от School Pak)
Elina74
Извиняюсь, что прошу такую древность,
но плиз, дайте что-нибудь, чтобы пофиксить ошибку 200 (zero division) в Borland Paskal 7.0 или 7.1.
Лучше патч…
vlfdimir58
google.com
borland pascal patch 200
Elina74
Это я умею, у меня щас инета нету…
stream2008
Исходник модуля crt.tpu есть?
А то помню, что она там как-то тривиально правилась заменой какой-токонстанты на в 10 раз большую, а потом во всех delay’ах надо было в 10 раз дольшую задержку писать….
Elina74
Нет, и есть инсталлить BP с сорцами, тоже нет…
Dasar
посмотри здесь
ps
но может быть уже есть более новая версия патча
Elina74
Спасибо большое, это то, что я искал.
К сожалению, не покатило…
Т.е. нужные tpl заменились, а лучше не стало.
Может на Duron 1300 уже этот метод не прокатит? Опять слишком быстрый комп?
Ivan8209
Попробуй найти решение не с заменой делителя, а с забивкой всего участка.
Что-то такое пролетало по эхе.
Толи весной это было, толи в прошлом году.
—
«А я обучался азбуке с вывесок,
листая страницы железа и жести.»
Ivan8209
http://shleps.narod.ru/rulez/error200.html
/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^
Лечение «Run-time error 200»
Широко известен баг компиляторов Turbo/Borland Pascal, который вызывает ошибку «Run-time error 200: Деление на 0» при выполнении программ на быстрых процессорах (начиная от PII-266). По материалам конференций ФИДО было выяснено, что ошибка возникает при инициализации счетчика, используемого процедурой Delay. Сама процедура описана в широко используемом модуле Crt.
Для лечения бага применяются два метода:
1) Патч exe’шника
Ищем в любом редакторе, имеющем 16ричный режим следующую строку и заменяем 37 на E6.
B9 37 00 F7 F1
E6
2)Патч библиотеки.
Аналогичным образом патчатся файлы turbo.tpl и tpp.tpl из каталога BPBIN или TPBIN (В поставке Borland Pascal, в отличие от Turbo Pascal имеются библиотеки для защищенного режима. Они имеют расширение .tpp) После описанной манипуляции Паскалем можно пользоваться на новых машинах не применяя каждый раз патч к получаемым программам.
/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^
C:>debug
-e 100 b9 37 00 f7 f1
-u 100
0B06:0100 B93700 MOV CX,0037
0B06:0103 F7F1 DIV CX
/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^
Поищи, куда сохраняется значение.
Или поставь простые
mov ax, чего-то
mov dx, чего-то
Покосячишь задержки, но вдруг сработает.
—
«Vyroba umelych lidi, slecno, je tovarni tajemstvi.»
Karel Capek
Ivan8209
Ещё.
http://www.inetpro.ru/board/showflat.php?Cat=&Board=prog&Number=3308&page=0&view=collapsed&sb=5&part=
/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^
Все что нужно — это открыть exe файл в 16-ти ричном редакторе и заменить некоторые байты:
1. Первая последовательность для замены: необходимо найти тpи байта «BA 05 00» в шестнадцатеричной системе и заменить их на «BA FF 00»
2. Вторая последовательность для замены (только если первая не помогла!):
«90 E2 FE» на «FC E2 FD»
/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^
—
«Верь сводке погоды, но доверяй — интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги.»
Elina74
В этой программе zerodivide возникает не в результате каких-то моих делений, а в результате того, что Паскаль в начале работы программы пытается определить скорость процессора, путем выполнения какого-то простого цикла небольшое целое число раз. Потом делит это кол-во на количество системных тиков, которых в секунде пара десятков и таким образом подстраивает, как должен работать Delay. Это при всем том, что у меня нет в программе делений на ноль и использования самой функции Delay. Просто метод этот слишком примитивный и на быстрых компах не успевает пройти ни одного тика, за время выполнения циклов…
Кстати, пока я это писал, у меня все-таки получилось это! Она теперь работает, но только в досовском окне (у меня Win98 SE если оно в полнэкранном режиме! Она рисует кривую Коха (фрактал).
Всем спасибо за участие.
Ivan8209
Ещё
fido7.ru.pascal.chainik FAQ[2/4]
/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^
Можете так же воспользоваться утилитой unzero.com — маленький резидент,
позволяющий работать даже непропатченным программам. ЭТО HЕ ВИРУС!
section 1 of uuencode 5.10 of file unzero.com by R.E.M.
begin 644 unzero.com
MZ.,`#>+E([H8X1X-S^KMPRU];5U$](T=#/SE&LF977S^%-P/E[ «K3+0[«B
M`KR[`+VW11’5+GV_KQ>/F&&*C»+OI9ND9-:J&]2>* I11NED0AH67′(J+DQV6
MFX!BI&+,:FB/(:%3J,[&'[*=+%:P$%YNE%_>3<;!QD+» TT.$DHS#14)104/
M#A,%/CHD?#,U-C,R,GM>7G9;70LG.R4O+VDJ/F8_(3$M82A0459921I/ «1D&
M/SEA>V$0;%Q(35]#7TT’85=+5E(!»‘PW/4<I(«TN+SDL(3TK*#!$8 F)B;V-B
?;5H,»»!>N>8`K#+!+HA$_^+WZ4+_*$,I35A,+U4%
`
end
sum -r/size 44168/383 section (from «begin» to «end»)
sum -r/size 55029/256 entire input file
/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^/^
—
«Верь сводке погоды, но доверяй — интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги.»
Ivan8209
Ещё.
B9 37 00 F7 F1 можно заменить на B9 37 00 90 90
—
«Верь сводке погоды, но доверяй — интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги.»
Ivan8209
Да, я знаю.
> Покосячишь задержки, но вдруг сработает.
Ладно, а то я разогнался способы латания кидать.
—
«Не надо читать много книг.»
Мао Цзедун
Elina74
Да, а вылечилось, как оказывается, заменой tpl на их экземпляры 98-го года
я долго провозился, потому что не просек фишки с полноэкранным режимом…
Сообщения и коды ошибок
Сообщения и коды ошибок
- Out of memory (выход за границы памяти)
- Если в опции COMPILE/DESTINATION установлено значение MEMORY, замените эту опцию на DISK.
- Если в опции OPTIONS/COMPILER/LINK установлено значение MEMORY, замените эту опцию на DISK.
- Если Вы используете постоянно помещенные в память (резидентные) обслуживающие программы, такие как WINDOWS, SIDEKICK, NORTON
удалите их из памяти. - Если Вы используете интегрированную среду TURBO.EXE, то попробуйте воспользоваться компилятором ТРС.ЕХЕ, он занимает меньше памяти.
- Если ни одна из рекомендаций не помогает, то, возможно, Ваша программа просто слишком велика, чтобы компилировать ее в таком объеме памяти. В этом случае Вы должны разбить её на два или более модулей.
- Indentifier expected (не указан идентификатор). Этот идентификатор не был описан.
- Unknow indentifier (неизвестный идентификатор). Этот идентификатор не был описан.
- Duplicate indentifier (двойной идентификатор). Попытка дважды описать один и тот же идентификатор.
- Syntax error (синтаксическая ошибка). В исходном тексте найден неверный символ. Возможно, Вы забыли заключить в кавычки строковую константу.
- Error in real constant (ошибка в вещественной константе).
- Error in integer constant (ошибка в целой константе). Учтите, что после целых действительных чисел, превышающих диапазон представления целых чисел (-2147483648…+2147483647), должны ставиться точка и нуль, например 12345678912.0.
- String constant exceeds line (строковая константа превышает допустимые размеры). Вероятно, Вы забыли поставить апостроф в конце строковой константы.
- Too many nested files (слишком много вложенных файлов). Компилятор допускает не более пяти вложенных исходных файлов.
- Unexpected end of file (не найден конец файла).
Вы могли получить это сообщение об ошибке по одной из следующих причин:- Ваш исходный файл закончился перед последним END основного раздела< операторов. Вероятно, в Вашей программе неодинаковое количество операторов BEGIN и END.
- Включаемый файл заканчивается в середине раздела операторов. Каждый
раздел операторов должен целиком помещаться в одном файле. - Вы не закончили комментарий.
- Line to long (слишком длинная строка). Максимальная длина строки, обрабатываемой компилятором, равна 126 символам (обратите внимание: редактор среды может обрабатывать до 249
символов в строке). - Type identifier expected (здесь нужен идентификатор типа). Не указан тип
идентификатора. - Too many open files (слишком много открытых файлов). Если появляется эта ошибка, то это означает, что конфигурационный файл CONFIG.SYS операционной системы не включает параметр FILES=XX или этот параметр указывает слишком мало файлов. Увеличьте число файлов до нужного значения, например, до 20.
- Invalid file name (неверное имя файла). Имя файла не верно или указан несуществующий путь.
- File not found (файл не найден). Файл не был найден в просмотренных
каталогах. - Disk full (диск заполнен). Удалите некоторые файлы или воспользуйтесь
новым диском. - Invalid compiler directive (неправильная директива компилятора). Неверная буква в директиве компилятора, один из параметров директивы компилятора неверный, или Вы пользуетесь глобальной директивой компилятора, когда компиляция тела программы уже началась.
- Too many files (слишком много файлов). В компиляции программы или программного модуля участвуют слишком много файлов. Попытайтесь не использовать так много файлов, например, объединяя включаемые файлы.
- Undefined type in pointer definition (неопределенный тип в объявлении указателя). Попытка объявить типизированный указатель, связанный с необъявленным типом данных.
- Variable identifier expected (отсутствует идентификатор переменной). На
этом месте должен быть идентификатор переменной. - Error in type (ошибка в объявлении типа). Объявление типа не может начинаться с этого символа.
- Structure too lage (слишком большая структура). Максимально допустимый размер любого структурированного типа -65520 байт.
- Set base type of range (базовый тип множества нарушает границы). Базовый тип множества должен представлять собой тип-диапазон с границами в пределах от 0 до 255 или перечисляемый тип с не более чем 256 значениями.
- File components may not be files (компонентами файла не могут быть файлы). Конструкции типа файл файлов не допускаются.
- Invalid string length (неверная длина строки). Длина строки должна находиться в диапазоне от 1 до 225.
- Type mismatch (несоответствие типов). Это сообщение может быть вызвано
следующими причинами:- Несовместимые типы переменной и выражения в операторе присваивания.
- Несовместимые типы фактического и формального параметров в обращении к процедуре или функции.
- Тип выражения несовместим с типом индекса при индексировании массива.
- Несовместимые типы операндов в выражении.
- Invalid subrange base type (неправильный базовый тип для типа-диапазона).Допустимыми базовыми типами являются все порядковые типы.
- Lower bound greater than upper bound (нижняя граница больше верхней).Описание типа-диапазона содержит неправильные границы.
- Ordinal type expected (нужен порядковый номер). Вещественные, строковые, структурные, процедурные типы и указатели в данном месте программы не допускаются.
- Integer constant expected (нужна целая константа).
- Constant expected (нужна константа).
- Integer or real constant expected (нужна целая или вещественная константа).
- Type identifier expected (нужен идентификатор типа).
- Invalid function result type (неправильный тип результата функции). Правильными типами результата функции являются все простые типы, строковые типы и указатели.
- Label identifier expected (нужен идентификатор метки). Метка не обозначена с помощью идентификатора, как это требуется из контекста программы.
- BEGIN expected (нужен BEGIN).
- END expected (нужен END).
- Integer expression expected (нужно выражение типа INTEGER).
- Ordinal expression expected (нужно выражение перечисляемого типа). Предшествующее выражение должно иметь перечисляемый тип.
- Boolean expression expected (нужно выражение типа BOOLEAN). Предшествующее выражение должно иметь тип BOOLEAN.
- Operand types do not match operator (типы операндов не соответствуют операции). Данная операция не может быть применена к указанным операндам, например, ‘A’ div ‘2’.
- Error in expression (ошибка в выражении). Данный символ не может участвовать в выражении указанным образом. Возможно, Вы забыли указать операцию между двумя операндами.
- Illegal assignment (неверное присваивание). Файлам и не типизированным переменным нельзя присваивать значения. Идентификатору функции можно присвоить значение только внутри раздела операторов данной функции.
- Field identifier expected (нужен идентификатор поля). Попытка использовать запись целиком в том месте, где требуется ссылка на какое-либо поле записи.
- Object file too large (объектный файл слишком большой). Турбо-Паскаль не может компоновать файлы .obj больше 64 Кбайт.
- Undefined external (неопределенная внешняя процедура). Внешняя процедура или функция не имеет соответствующего определения PUBLIC в объектном файле. Убедитесь, что вы указали все объектные файлы в директивах (SL filename} и проверьте написание идентификаторов процедуры или функции в файле .asm.
- Invalid object file record (неправильная запись объектного файла). Файл .obj содержит неверную объектную запись. Убедитесь, что данный файл является действительно файлом .obj
- Code segment too large (сегмент кода слишком большой). Максимальный размер кода программы или программного модуля равняется 65520 байт. Если вы компилируете программный модуль, разбейте его на два или более программных модуля.
- Data segment too large (сегмент данных слишком велик). Максимальный размер сегмента данных программы равен 65520 байт, включая данные, используемые программными модулями. Если вам нужно большее количество глобальных данных, опишите большие структуры с помощью указателей и выделяйте для них память с помощью процедуры NEW.
- DO expected (нужен оператор DO).
- Invalid PUBLIC definition (неверное определение PUBLIC). Возможные причины сообщения:
- Данный идентификатор получил тип PUBLIC, с помощью соответствующей директивы языка ассемблер, но не соответствует описанию EXTERNAL в программе или программном модуле Паскаля.
- Две или более директивы PUBLIC языка ассемблер определяют один и тот же идентификатор.
- Файлы .obj определяют символы PUBLIC, не находящиеся в сегменте CODE.
- Invalid EXTRN definition (неправильное определение EXTRN). Возможные причины сообщения:
- Программа на ассемблере ссылается с помощью директивы ETRN на идентификатор, который не описан в программе на Паскале и не был описан в интерфейсных секциях используемых программных модулей.
- Ассемблерная программа ссылается на идентификатор, обозначающий абсолютную переменную (т.е. определённую словом ABSOLUTE).
- Ассемблерная программа ссылается на идентификатор процедуры или функции типа INLINE.
- Too many EXTRN definition (слишком много определений типа EXTRN).Турбо-Паскаль не может обрабатывать файлы .obj при более чем 256 определениях EXTRN.
- OF expected (требуется OF).
- INTERFACE expected (требуется интерфейсная секция).
- Invalid relocatable reference (недействительная перемещаемая ссылка). Возможные причины сообщения:
- Файл .obj содержит данные и перемещаемые ссылки в сегментах, отличных от CODE. Например, Вы пытаетесь описать инициализированные переменные в сегменте DATA.
- Файл .com содержит ссылки с размерами в байтах на перемещаемые символы. Такая ошибка происходит в случае, если Вы используете, операторы HIGH и DOWN с перемещаемыми символами или если Вы ссылаетесь в директивах DB на перемещаемые символы.
- Операнд ссылается на перемещаемый символ, который не был определен в сегменте CODE или в сегменте DATA.
- Операнд ссылается на процедуру EXTRN или функцию EXTRN со сдвигом, например, CALL SortProc +8.
- THEN expected (требуется THEN).
- TO or DOWNTO expected (требуется ТО или DOWNTO).
- Undefined forward (неопределенное опережающее описание). Возможные причины сообщения:
- Были описаны процедура или функция в интерфейсной секции программного модуля, но их определение отсутствует в секции реализации.
- Процедуры или функции были описаны с помощью опережающего описания, но их определение не найдено.
- Too many procedures (слишком много процедур). Турбо-Паскаль не допускает более 512 процедур или функций в одном модуле. Если Вы компилируете программу, то поместите некоторые процедуры или функции в модули. Если Вы компилируете модуль, то разбейте его на два или несколько модулей.
- Invalid typecast (неверное преобразование типа). Возможные причины сообщения:
- Попытка разместить в памяти, занимаемой некоторой переменной, значение выражения другого типа в случае, когда размер размещаемого значения не равен размеру переменной.
- Вы пытаетесь осуществить преобразование типа выражения, когда разрешается только ссылка на переменную, процедуру или функцию.
- Division by zero (деление на ноль). Предшествующая операция пытается выполнить деление на ноль.
- Invalid file type (неверный файловый тип). Данный файловый тип не обслуживается процедурой обработки файлов. Например, процедура READLN используется для типизированного файла, или процедура SEEK -для текстового файла.
- Cannot Read or Write variables of this type (нет возможности считать или записать переменные данного типа). Нарушены следующие ограничения:
- Процедуры READ и READLN могут считывать переменные символьного, целого, действительного и строкового типа.
- Процедуры WRITE и WRITELN могут выводить переменные символьного, целого, действительного, логического и строкового типа.
- Pointer variable expected (нужно использовать переменную-указатель). Предыдущая переменная должна быть указателем.
- String variable expected (нужна строковая переменная). Предшествующая переменная должна иметь строковый тип.
- String expression expected (нужно выражение строкового типа). Предшествующее выражение должно иметь строковый тип.
- Unit not found (программный модуль не найден). Один или несколько программных модулей, используемых данным модулем, не указаны в предложении USES.
- Unit name mismatch (несоответствие имен программных модулей). Имя программного модуля, найденное в файле .tpu, не соответствует имени, указанному в предложении USES.
- Unit version mismatch (несоответствие версий программных модулей). Один или несколько программных модулей, используемых данной программой, были изменены после их компиляции. Воспользуйтесь опцией COMPILE/MAKE или COMPILE/BUILD в интегрированной интерактивной среде или опциями /М или /В в компиляторе ТРС, что позволит автоматически скомпилировать программные модули, нуждающиеся в перекомпиляции.
- Duplicate unit name (повторное имя программного модуля). Вы уже указали этот программный модуль в операторе USES.
- Unit file format error (ошибка формата файла модуля). Файл .tpu является недействительным. Убедитесь, что это действительно файл .tpu.
- Implementation expected (отсутствует исполняемая часть модуля).
- Constant and case types do not match (типы констант и тип выражения оператора CASE не соответствуют друг другу). Тип константы оператора CASE не совместим с выражением в операторе варианта.
- Record variable expected (нужна переменная типа запись). Предшествующая переменная должна иметь тип запись.
- Constant out of range (константа нарушает границы). Возможные причины сообщения:
- Вы пытаетесь указать индекс массива, выходящий за его границы.
- Вы пытаетесь присвоить переменной значение, выходящее за границы, допустимые для типа этой переменной.
- Вы пытаетесь передать в качестве фактического параметра процедуре или функции константу, выходящую за границы, допустимые для типа соответствующего формального параметра.
- File variable expected (нужна файловая переменная). Предшествующая переменная должна иметь файловый тип.
- Pointer expression expected (нужно выражение типа указатель).
Предшествующее выражение должно иметь тип указателя. - Integer or real expression expected (нужно выражение типа REAL или INTEGER). Предшествующее выражение должно иметь тип (REAL или INTEGER)
- Label not within current block (метка не находится внутри текущего блока). Оператор GOTO не может ссылаться на метку, находящуюся вне текущего блока.
- Label already defined (метка уже определена). Данная метка уже помечает оператор.
- Undefined label in processing statement part (неопределенная метка в предшествующем разделе операторов). Данная метка была описана, и на неё осуществлялась ссылка в предшествующем разделе операторов, но она не указана в тексте программы.
- Invalid @ argument (недействительный аргумент операции @).Действительными аргументами являются идентификаторы переменных, процедур и функций.
- Unit expected (нужно кодовое слово UNIT).
- «;» expected (нужно указать «;» ).
- «:» expected (нужно указать «:» .
- «,» expected (нужно указать «,» ).
- «(» expected (нужно указать «(» ).
- «)» expected (нужно указать «)» ).
- «=» expected (нужно указать «=» ).
- «:=» expected (нужно указать «:=» ).
- «[» or «(.» expected (нужно «[» или «(.»).
- «]» or «.)» expected (нужно «]» или «.)»).
- «.» expected (нужно «.»).
- «..» expected (нужно «..»).
- Too many variables (слишком много переменных). Возможные причины сообщения:
- Общий размер глобальных переменных, описанных в программе или программном модуле, не может превышать 64 Кбайт.
- Размер локальных переменных, описанных в программе или функции, не может превышать 64 Кбайт.
- Invalid FOR control variable (неправильная управляющая переменная оператора FOR). Управляющая переменная оператора FOR должна быть переменной перечисляемого типа, определенной в разделе описаний текущей программы.
- Integer variable expected (нужна переменная целого типа) предшествующая переменная должна иметь целый тип. )
- Files are not allowed here (здесь не допускаются файлы). Типизированная константа не может иметь файловый тип.
- String length mismatch (несоответствие длины). Длина строковой константы не соответствует количеству элементов символьного массива.
- Invalid ordering of fields (неверный порядок полей). Поля в константе типа запись должны записываться в порядке их описания.
- String constant expected (нужна константа строкового типа).
- Integer or real variable expected (нужна переменная типа INTEGER или REAL). Предшествующая переменная должна иметь целый или вещественный тип.
- Ordinal variable expected (нужна переменная порядкового типа). Предшествующая переменная должна иметь порядковый тип.
- INLINE error (ошибка в операторе INLINE). Оператор «<» не допускается в сочетании с перемещаемыми ссылками на переменные. Такие ссылки всегда имеют размер в слово.
- Character expression expected (предшествующее выражение должно иметь символьный тип).
- Too many relocation items (слишком много перемещаемых элементов).Размер таблицы перемещения файла .ехе превышает 64К, что является верхним пределом в Турбо-Паскале. Если вы обнаружили эту ошибку, то это значит, что программа просто слишком велика для обработки компоновщиком Турбо-Паскаля. Возможно также, что она слишком велика для выполнения в PC DOS. В таком случае нужно выделить в программе основной раздел, который выполнял бы обращение к двум или более вспомогательным разделам с помощью процедуры EXEC из модуля DOS.
- Not enough memory to run program (недостаточно памяти для выполнения программы). Недостаточно памяти для выполнения программы из среды Турбо-Паскаля. Попытайтесь воспользоваться рекомендациями, связанными с ошибкой 1. Если это не поможет, то скопируйте свою программу на диск, выйдите из среды и запустите программу средствами ДОС.
- Cannot find EXE file (невозможно найти файл .ехе). по какой-то причине файл .ехе сгенерированный ранее компилятором, исчез.
- Cannot run a unit (модуль выполнить нельзя). Вы не можете выполнить программный модуль. Чтобы проверить его, напишите программу, использующую этот программный модуль.
- Compilation aborted (компиляция прервана). Компиляция была прервана с помощью CTRL-BREAK.
- CASE constant out of range (константа CASE нарушает допустимые границы). Целочисленные константы оператора CASE должны находиться в диапазоне от -32768 до 32767.
- Error in statement (ошибка в операторе). Данный символ не может быть первым символом в операторе.
- Cannot call an interrupt procedure (невозможно вызвать процедуру прерывания). Вы не можете непосредственно вызвать процедуру прерывания.
- Must have an 8087 to compile this (для компиляции необходимо наличие сопроцессора 8087). Для компиляции программ и программных модулей в режиме {$N+} необходим сопроцессор 8087. Используйте программную эмуляцию сопроцессора с помощью директивы {$N+.E+}.
- Must be in 8087 mode to compile this (для компиляции необходим режим 8087). Данная программа может быть скомпилирована только в режиме {$N+}. В состоянии {$N-} операции с типами SINGLE, DOUBLE, EXTENDED и СОМР не допускаются.
- Target address not found (указанный адрес не найден). Команда COMPILER/FIND ERROR в среде Турбо-Паскаля или опция /F в командной строке компилятора ТРС.ЕХЕ не обнаружила оператор, соответствующий заданному адресу.
- Include files are not allowed here (здесь не допускаются включаемые файлы). Раздел операторов должен целиком размещаться в одном файле.
- TMP file format error (ошибка формата файла .ТМР). Файл .ТМР является недействительным. Убедитесь, что этот файл является в действительности файлом .ТМР.
- NIL expected (нужен NIL).
- Invalid qualifier (неверный идентификатор). Возможные причины сообщения:
- Вы пытаетесь индексировать переменную, которая не является массивом.
- Вы пытаетесь указать поля в переменной, которая не является записью.
- Вы пытаетесь использовать в качестве указателя переменную, которая не является указателем.
- Invalid variable reference (недействительная ссылка на переменную). Предыдущая конструкция удовлетворяет синтаксису ссылки на переменную, но она не указывает адрес памяти. Наиболее вероятно, что Вы вызываете функцию-указатель, но забываете поставить знак ? после неё.
- Too many symbols (слишком много символов). Программа или программный модуль содержат более 64 Кбайт символов. Если Вы компилируете программу с директивой {$D+},xo попробуйте отключить эту директиву или разбейте программу на несколько модулей.
- Statement part too large (слишком большой раздел операторов). Турбо-Паскаль ограничивает размер раздела операторов примерно до 24 Кбайт. Если Вы обнаружили эту ошибку, поместите части раздела операторов в одну или несколько процедур и вообще сделайте Вашу программу более структурированной.
- Module has no debug information (в модуле нет отладочной информации). Ошибка периода выполнения обнаружена в модуле (программе), который не имеет отладочной информации, и по этой причине Турбо-Паскаль не может указать соответствующий оператор. Перекомпилируйте модуль с включенной опцией {$D+} или воспользуйтесь опцией COMPILER/FIND ERROR, чтобы найти эту ошибку.
- Files must be var parameters (файлы должны передаваться как параметры-переменные). Вы пытаетесь передать процедуре или функции параметр-значение файлового типа. Параметры файлового типа должны быть параметрами-переменными.
- Too many conditional symbols (слишком много условных символов). Не хватает памяти для определения условных символов (слов, управляющих командами условной компиляции). Попытайтесь удалить некоторые символы или уменьшить их длину.
- Misplaced conditional directive (пропущена условная директива). Компилятор обнаружил директиву {$ELSE} или {$ENDIF} без соответствующих директив {$IFDEF}, {$IENDEF} или {$IFOPT}.
- ENDIF directive missing (пропущена директива ENDIF). Исходный файл закончился внутри конструкции условной компиляции. В исходном файле должно быть равное количество директив {$IFxxx} и {$ENDIF}.
- Error in initial conditional defines (ошибка в условных определениях).
Исходные условия компиляции, указанные в опции
OPTIONS/COMPILER/CONDITIONAL DEFINES являются недействительными. В Турбо-Паскале разрешается не указывать условия компиляции; если же приведено несколько условий, они должны разделяться точкой с запятой. - Header does not match previous definition (заголовок не соответствует
предыдущему определению). Возможные причины сообщения:- Заголовок процедуры или функции, указанный в интерфейсной секции, не соответствует заголовку в исполняемой части.
- Заголовок процедуры или функции, указанный с помощью опережающего описания (FORWARD), не соответствует заголовку найденной далее одноименной процедуры или функции.
- Critical disk error (критическая ошибка диска). Во время компиляции
произошла критическая ошибка диска (например, дисковод находится в
состоянии «не готов»). - Cannot evaluate this expression (нельзя вычислить данное выражение). В
выражении-константе или в отладочном выражении Вы пытаетесь
использовать неподдерживаемые средства, например в описании константы
пытаетесь использовать функцию SIN или вызвать в отладочном выражении
определенную пользователем функцию. - Expression incorrectly terminated (некорректное завершение выражения).
Контекстуально в данном месте программы должен быть конец выражения
или оператора. - Invalid format specifier (неверный спецификатор формата). Используется
неверный спецификатор формата или числовой аргумент спецификатора
формата выходит за допустимые границы. - Invalid indirect reference (недопустимая косвенная ссылка). Оператор пытается осуществить недопустимую косвенную ссылку. Например, Вы используете абсолютную переменную, базовая переменная которой в текущем модуле неизвестна, или используете программу типа INLINE , в которой делается ссылка на переменную, неопределенную в текущем модуле.
- Structured variable are not allowed here (здесь нельзя использовать переменную структурного типа). Делается попытка выполнить надпеременной структурного типа неподдерживаемую операцию. Например, Вы пытаетесь перемножить две записи.
- Cannot evaluate without System unit (нельзя вычислить выражение без модуля SYSTEM). Чтобы отладчик смог вычислить выражение, в файле TURBO.TPL должен содержаться модуль SYSTEM.
- Cannot access this symbol (нет доступа к данному символу). Как только вы скомпилируете программу, все множество её символов станет доступным. Однако к отдельным символам (например, к переменным) нельзя получить доступ, пока Вы не запустите программу.
- Invalid floating-point operation (недопустимая операция с плавающей запятой). При операции с плавающей запятой произошло переполнение или деление на ноль.
- Cannot compile overlay to memory (нельзя выполнить компиляцию оверлеев в память). Программа, использующая оверлеи, должна компилироваться на диск.
- Procedure or function variable expected (должна использоваться переменная процедурного типа). В этом контексте оператор получения адреса @ может использоваться только с переменной процедурного типа.
- Invalid procedure or function reference (недопустимая ссылка на процедуру или функцию). Возможные причины сообщения:Попытка вызова процедуры в выражении.Процедура или функция, использующая в качестве параметра вызов другой процедуры или функции, должна компилироваться в состоянии {$F+} и не
может описываться с помощью ключевых слов INLINE или INTERRUPT . - Cannot overlay this unit (этот модуль не может использоваться в качестве оверлейного). Попытка использовать в качестве оверлейного модуль, который не был скомпилирован с директивой {$О+}.
- File not found (не найден файл). Ошибка генерируется процедурами RESET, APPEND, RENAME, или ERASE, если имя, присвоенное файловой переменной, указывает несуществующий файл.
- Path not found (путь не найден). Ошибка генерируется
процедурами:
• RESET, REWRITE, APPEND или ERASE, если имя,
присвоенное файловой переменной, является недействительным
или указывает на несуществующий подкаталог.
• CHDIR, MKDIR или RMDIR, если путь является
недействительным или указывает на несуществующий
подкаталог. - Too many open files (слишком много открытых файлов). Ошибка генерируется процедурами RESET, REWRITE или APPEND, если программа имеет слишком много открытых файлов. Операционная система ДОС не позволяет использовать более 15 открытых файлов для каждого процесса. Если Вы получили данное сообщение при наличии менее 15 открытых файлов, это может означать, что файл CONFIG.SYS не содержит параметр FILES = xxx или этот параметр задает слишком мало файлов. Увеличьте параметр FILES = xxx до какого-либо подходящего значения, например, до 20.
- File access defined (отказано в доступе к файлу). Данная ошибка генерируется процедурой:
• RESET или APPEND, когда имя, присвоенное файловой
переменной, указывает каталог или файл, доступный только для
чтения, в то время как параметр FILEMODE файловой
переменной содержит указание на запись данных.
• REWRITE, если каталог заполнен или если имя, присвоенное
файловой переменной, задает каталог или существующий файл,
доступный только для чтения.
• RENAME, если имя присвоенное файловой переменной,
указывает каталог или если новое имя указывает существующий
файл.
• ERASE, если имя, присвоенное файловой переменной, указывает
каталог или файл, доступный только для чтения.
• MKDIR, если файл с тем же именем уже существует в каталоге, в
котором создается подкаталог, и в этом каталоге нет места для
подкаталога или путь к каталогу содержит имя логического
устройства.
• RMDIR, если каталог не является пустым, если путь не
определяет каталог или если путь задает корневой каталог.
• READ или BLOCKREAD в случае типизированного или
нетипизированного файла, если файл не открыт для чтения.
• WRITE или BLOCKWRITE для типизированного или
нетипизированного файла, если этот файл не открыт для записи. - Invalid file handle (недопустимый файловый канал). Данная ошибка генерируется, когда системному вызову ДОС передается недопустимый файловый канал. Эта ошибка не должна возникать в правильно работающей программе. Её появление является свидетельством того, что файловая переменная каким-либо образом испорчена.
- Invalid file access code (недействительный код доступа к файлам). Ошибка генерируется процедурами RESET или APPEND, если значение параметра FILEMODE в файловой переменной не является допустимым.
- Invalid drive number (недопустимый номер дисковода). Ошибка генерируется процедурой GETDIR, если номер дисковода не является допустимым.
- Cannot remove current directory (нельзя удалить текущий каталог). Ошибка генерируется процедурой RMDIR, если путь указывает текущий каталог.
- Cannot rename across drives (нельзя при переименовании указывать разные дисководы). Генерируется процедурой RENAME, если оба файла не находятся на одном и том же диске.
- Disk read error (ошибка чтения с диска). Генерируется
процедурой READ в типизированном файле, если Вы пытаетесь
осуществить считывание после конца файла. - Disk write error (ошибка записи на диск). Ошибка генерируется процедурами CLOSE, WRITE, WRITELN, FLUSH, если диск заполнен.
- File not assigned (файлу не присвоено имя), ошибка генерируется процедурами RESET REWRITE , APPEND, RENAME и ERASE в случае, если файловой переменной не было присвоено имя файла с помощью обращения к процедуре ASSIGN.
- File not open (файл не открыт). Ошибка генерируется процедурами CLOSE, READ, WRITE, SEEK, EOF, FILEPOS, FILESIZE, FLUSH, BLOCKREAD, BLOCKWRITE, если файл не открыт.
- File not open for input (файл не открыт для ввода).ошибка генерируется процедурами READ, READLN, EOF, EOLN, SEEKEOF, или SEEKEOLN в текстовом файле, если файл не открыт для ввода.
- File not open for output (файл не открыт для вывода). Ошибка генерируется процедурами WRITE или WRITELN в текстовом файле, если файл не открыт для вывода.
- Invalid numeric format (неверный числовой формат). Ошибка генерируется процедурами READ или READLN, если числовое значение, считанное из текстового файла, не соответствует правильному числовому формату.
- Disk is write protected (диск защищен от записи).
- Unknown unit (неизвестный модуль).
- Drive not ready (дисковод находится в состоянии «не готов»).
- Unknown command (неопознанная команда).
- CRC error in data (ошибка в исходных Данных).
- Bad drive requiest structure length (при обращении к диску указана неверная длина структуры).
- Disk seek error (ошибка при операции установки головок на диске).
- Unknown media type (неизвестный тип носителя).
- Sector not found (сектор не найден).
- Printer out of paper (закончилась бумага на принтере)
- Device write fault (ошибка при записи на устройство).
- Device read fault (ошибка при чтении с устройства).
- Hardware failure (сбой аппаратуры).
- Division by zero (деление на нуль).
- Range check error (ошибка при проверке границ). Ошибка генерируется операторами, скомпилированными в состоянии {$R+}, при возникновении одной из следующих ситуаций:
- Индексное выражение массива находилось вне допустимого диапазона.
- Была осуществлена попытка присвоить переменной значение, находящееся вне диапазона переменной.
- Была осуществлена попытка передать значение, находящееся вне допустимого диапазона, в качестве параметра процедуре или функции.
- Stack overflow error (переполнение стека). Эта ошибка генерируется при входе в процедуру или функцию, скомпилированную в режиме {$8+}, если нет достаточной области для размещения локальных переменных программы. Увеличьте размер стека, используя директиву компилятора {$М}.
-
Heap overflow error (переполнение кучи). Эта ошибка
генерируется процедурами NEW или GETMEM в случае, если в
куче не хватает памяти требуемого размера. - Invalid pointer operation (недействительная операция с указателем). Эта ошибка генерируется процедурами DISPOSE или FREEMEM, когда указатель имеет значение NIL или содержит адрес, лежащий за пределами динамически распределяемой области памяти.
- Floating point overflow (переполнение при операции с плавающей запятой).
- Floating point underflow (исчезновение порядка при операции с плавающей запятой). Эта ошибка генерируется только в том случае, если используется сопроцессор 8087/80287/80387 с управляющим словом, которое демаскирует ошибку исчезновения порядка. По умолчанию исчезновение порядка приводит к возвращению результата, равного нулю.
-
Invalid floating point operation (недопустимая операция с плавающей запятой). Возможные причины сообщения:
- Аргумент функции TRUNC или ROUND не может быть
преобразован в целое число, находящееся внутри диапазона типа
LONGINT (от -2147483648 до +2147483647). - Отрицательный аргумент функции SQRT (извлечение квадратного корня).
- Аргумент функции LN (логарифм) равен нулю или имеет отрицательное значение.
- Произошло переполнение стека сопроцессора.
- Аргумент функции TRUNC или ROUND не может быть
- Overlay manager not installed (не установлена подсистема управления оверлеем). Ваша программа- вызывает оверлейную процедуру или функцию, а подсистема управления оверлеем не инициализирована. Вероятнее всего в программе отсутствует обращение к процедуре OVRINIT или обращение к этой процедуре завершилось с ошибкой. Нужно иметь в виду, что если в каком-либо из оверлейных модулей содержится раздел инициализации, то в программе необходимо создать дополнительный или использовать имеющийся неоверлейный модуль, вызывающий процедуру OVRINIT в своем разделе инициализации, и указать этот модуль в предложении USES перед любым из оверлейных модулей.
- Overlay file read error (ошибка чтения оверлейного файла). Когда подсистема управления оверлеем пыталась считать оверлей из оверлейного файла, произошла ошибка чтения.
Компилятору не хватает памяти. Имеется ряд возможных решений этой проблемы:
Ошибки, возникающие во время выполнения программы
Некоторые ошибки, обнаруженные во время выполнения программы, приводят к появлению на экране сообщения вида Runtime error nnn at xxxx:yyyy (ошибка времени выполнения nnn по адресу ххххгуууу), после чего программа завершает свою работу.
Ошибки времени выполнения делятся на две категории: ошибки ввода-вывода (коды ошибок с 1 до 199) и грубые ошибки (коды ошибок с 200 до 255).
Ошибки ввода-вывода вызывают завершение выполнения программы в случае, если оператор ввода-вывода был скомпилирован в режиме {$!+}. В режиме {$!-} продолжается выполнение программы, а ошибка возвращается функцией IORESULT. Коды ошибок 1-99 соответствуют кодам ошибок ДОС. 100-149 — ошибкам ввода вывода, 150-199 — критическим ошибкам, а 200-255 — фатальным ошибкам.
Ошибки DOS:
Ошибки ввода-вывода:
Если один из операторов компилируется с директивой {$!+}, то ошибка ввода-вывода приводит к прекращению выполнения программы. В состоянии {$!-} программа продолжает выполняться, а ошибка возвращается функцией IORESULT.
Критические ошибки:
Фатальные ошибки:
Грубые ошибки всегда приводят к немедленной остановке программы.
ЧАСТЬ
5. ПРИЛОЖЕНИЯ ПРИЛОЖЕНИЕ
А.
СООБЩЕНИЯ
ОБ ОШИБКАХ
Предыдущая
страница | Следующая
страница
Сообщения об ошибках компиляции.
Приведенные ниже
списки возможных сообщений об ошибках можно получить
от компилятора при разработке программы.
Когда это возможно, компилятор будет выводить
на дисплей дополнительную диагностическую информацию в виде имени идентификатора или файла, например :
Error 15 : File not found (Window.TPU)
(Ошибка 15 : Файл не найден)
Когда ошибка
обнаружена, Turbo Pascal (в интегрированной
среде) автоматически загружает исходный файл и помещает
курсор в позицию ошибки. Компилятор командной
строки выводит на дисплей сообщение об ошибке
и ее номер, а также исходную строку
и использует знак вставки (^) для указания
места, где произошла ошибка.
Тем не менее
заметим, что некоторые ошибки обнаруживаются несколько
позже в исходном тексте. Например, несоответствие типов в операторе
присваивания не может быть обнаружено до тех пор, пока все
выражение после «:=» не будет вычислено. В таких случаях
ищите ошибку слева или выше от курсора.
1. Out of memory
(не хватает памяти)
Эта ошибка
происходит, когда компилятору не хватает памяти. Есть несколько
возможных решений этой проблемы:
— если опция
Compile/Destination имеет значение Memory, то измените ее
значение на Disk в интегрированной среде.
— если опция
Options/Compiler /Link buffer в интегрированной среде имеет значение
Memory , то измените ее значение на Disk.
В компиляторе командной строки для редактирования
на диск нужно использовать опцию /L.
— если используются
любые утилиты, находящиеся в памяти, например
SideKick и SuperKey, то их нужно удалить из памяти.
— если используется
Turbo.EXE, то постарайтесь использовать вместо Turbo.EXE TPC.EXE,
эта программа использует меньше памяти.
Если ни один вариант
не помогает, то эта программа или модуль, возможно, просто слишком
большие для компиляции в доступном объеме памяти. В этом
случае нужно разбить модуль на два или большее количество
меньших модулей.
2. Identifier expected
(ожидается идентификатор)
В этой точке
предполагался идентификатор. Возможно, Вы пытаетесь повторно объявить зарезервированное слово.
3. Unknown identifier
(неизвестный идентификатор)
Этот идентификатор
не объявлен или невидим внутри текущей сферы
действия.
4. Duplicate identifier
(дублируемый идентификатор)
Этот идентификатор
уже был использован в текущем блоке.
5. Syntax error (синтаксическая
ошибка)
В исходном тексте
был найден неправильный символ. Возможно, Вы забыли кавычки вокруг строковой
константы.
6. Error in
real constant (ошибка в константе вещественного типа)
Синтаксис констант
вещественного типа определен в главе 1
«Лексемы и константы».
7. Error in integer constant (ошибка в константе целого типа)
Синтаксис констант
целого типа определен в главе 1 «Лексемы и константы».
Заметим, что за целыми числами вещественного
типа, лежащими за пределами максимального
целого диапазона, должна следовать десятичная точка и ноль;
например :
12345678912.0
8. String constant exceeds
line (строковая константа выходит за пределы строки)
Наиболее вероятно,
что Вы забыли закрывающую кавычку в строковой константе.
9. Too many nested files
(слишком много вложенных файлов)
Компилятор допускает
не более 15 вложенных файлов. Наиболее вероятно, что
в программе более 14 вложенных файлов.
10. Unexpected end of
file (неожиданный конец файла)
Можно получить
такое сообщение об ошибке из-за следующих
причин:
— исходный файл
заканчивается перед последним end главной операторной
части. Наиболее вероятно, что количество операторов
begin и end несбалансировано.
— включенный файл заканчивается
в середине операторной части. Каждая операторная часть
должна полностью содержаться в одном файле.
— не закрыт комментарий.
11. Line too long
(строка слишком длинная)
Максимальная длина
строки равна 126 символам.
12. Type identifier
expected (ожидается тип идентификатора)
Этот идентификатор
не обозначает тип, как это должно быть.
13. Too many open
files (слишком много открытых файлов)
Если произошла
эта ошибка, то или в файле CONFIG.SYS
нет записи FILES = xx, или эта запись задает
слишком мало файлов. Увеличьте это значение до некоторого
подходящего значения, например до 20.
14. Invalid file
name (неправильное имя файла)
Неправильное имя
файла или задается несуществующий путь доступа.
15. File not found
(файл не найден)
Этот файл
не может быть найден в текущем справочнике или в любом
из поисковых справочников, которые применяются к этому типу
файла.
16. Disk full
(диск полон)
Удалите несколько
файлов или используйте новый диск.
17. Invalid
compiler directive (неправильная директива компиляции)
Буква директивы
компилятора неизвестна, один из параметров директивы
компилятора неизвестен или используется
глобальная директива компилятора, когда компиляция
тела программы уже началась.
18. Too many files (слишком
много файлов)
В компиляцию программы
или модуля включено слишком много файлов. Попытайтесь
не использовать так много файлов, например
посредством объединения включенных файлов или
укорачивания имен файлов.
19. Undefined type in
pointer definition (неопределенный тип в определении указателя)
На этот тип ранее была ссылка в объявлении типа указателя, но он не был объявлен.
20. Variable
identifier expected (ожидается идентификатор
переменной)
Этот идентификатор
не обозначает переменную, как это должно быть.
21. Error in type
(ошибка в типе)
Этот символ не
может начинать определение типа.
22. Structure
too large (структура слишком большая)
Максимальный допустимый
размер структурного типа равен 65520 байтам.
23. Set base type
out of range (базовый тип множества выходит за допустимый диапазон)
Базовый тип множества
должен быть поддиапазоном , который находится
внутри диапазона 0..255, или перечислимым типом, который имеет
не более 256 возможных значений.
24. File components may
not be files or objects (компонентами файла не могут быть файлы
или объекты)
В качестве файловых
компонент не могут быть файлы или объекты, а так же ни один из структурных
типов, которые включают тип объекта или файла.
25. Invalid string
length (неправильная длина строки)
Объявленная максимальная длина строки должна быть в диапазоне 1..255.
26. Type mismatch
(несоответствие типов)
Это может быть
по следующим причинам:
— несовместимые
типы переменной и выражения в операторе
присваивания
— несовместимые типы
фактического и формального параметра в вызове процедуры
или функции
— тип выражения,
который несовместим с типом индекса в индексации массива
— несовместимые типы
операндов в выражении.
27. Invalid subrange
base type (неправильный поддиапазонный базовый тип)
Все порядковые
типы являются допустимыми базовыми типами.
28. Lower
bound greater than upper bound (нижняя
граница больше верхней границы)
В объявлении
поддиапазонного типа нижняя граница указана
больше верхней границы.
29. Orginal type
expected (ожидается порядковый тип)
В данном случае
вещественный, строковый, структурный тип и тип указателя недопустим.
30. Integer constant
expected (ожидается целая константа)
31. Constant expected
(ожидается константа)
32. Integer or real constant
expected (ожидается целая или вещественная константа)
33. Type identifier
expected (ожидается тип идентификатора)
Этот идентификатор
не обозначает тип указателя, как это должно быть.
34. Invalid function
result type (неправильный тип результата функции)
Правильными типами
результатов функций являются все простые типы, строковые
типы и типы указателей.
35. Label identifier expected (ожидается идентификатор метки)
Этот идентификатор
не обозначает метку, как это должно быть.
36. Begin expected
(ожидается оператор begin)
37. End expected
(ожидается оператор end)
38. Integer expession
expected (ожидается целое выражение)
Предыдущее выражение
должно быть целого типа.
39. Ordinal
expession expected (ожидается выражение порядкового типа)
Предыдущее выражение
должно быть порядкового типа.
40. Boolean
expression expected (ожидается выражение булевского типа)
41. Operand types
do not match operator (типы операндов не соответствуют
оператору)
Оператор не
может быть применен к
операндам этого типа, например ‘A’ div ‘2’.
42. Error in expression
(ошибка в выражении)
Этот символ
не может участвовать в выражении
указанным способом. Возможно, Вы забыли
написать оператор между двумя операндами.
43. Illegal assignment(неправильное
присваивание)
— Файлы и
нетипированные переменные не могут быть присваиваемыми значениями.
— Идентификатору функции
можно присваивать значения только внутри операторной
части функции.
44. Field identifier
expected (ожидается идентификатор поля)
Этот идентификатор не обозначает поле в предыдущей переменной типа запись.
45. Object file
too large (объектный файл слишком большой)
Turbo Pascal не
может подредактировать .OBJ файлы, размером больше
64К.
46. Undefined
external (неопределенный внешний элемент)
Внешняя процедура
или функция не имеют соответствующего PUBLIC определения в объектном
файле. Убедитесь, что все объектные файлы заданы
в директивах {$L имя файла}
и проверьте написание идентификатора процедуры или функции
в .ASM файле.
47. Invalid object file
record (неправильная запись объектного файла)
.OBJ файл
содержит неправильную объектную запись; убедитесь, что файл фактически
является .OBJ файлом.
48. Code Segment
too large (сегмент кода слишком большой)
Максимальный размер
кода программы или модуля равен 65520
байт. Если компилируется программа, то нужно перенести
несколько процедур или функций в модуль. Если компилируется модуль,
то его нужно разбить на два или больше модулей.
49. Data segment
too large (сегмент данных слишком большой)
Максимальный размер
сегмента данных программы равен 65520 байт,
включая данные, объявленные используемыми модулями.
Если необходимо больше глобальных данных, то нужно
объявить структуры большого размера как указатели
и разместить их динамически с использованием
процедуры New.
50. Do expеcted (ожидается
ключевое слово)
51. Invalid
PUBLIC definition (неправильное определение
PUBLIC)
— Идентификатор
был сделан общедоступным с помощью директивы PUBLIC в
языке ассемблер, но он не
соответствует external объявлению в программе или в модуле на
Паскале.
— Две или более
директивы PUBLIC в ассемблере определяют один и тот же идентификатор.
— .OBJ файл определяет
PUBLIC символы , которые не находятся в сегменте CODE.
52. Invalid EXTRN
definition (неправильное определение EXTRN)
— На идентификатор
была ссылка с помощью директивы EXTRN в ассемблере,
но он не был объявлен ни в программе или модуле
на Паскале, ни в интерфейсной части используемых модулей.
— Этот
идентификатор обозначает absolute (абсолютную) переменную.
— Этот идентификатор
обозначает inline процедуру или функцию.
53. Too many EXTRN
definion (слишком много объявлений EXTRN)
Turbo Pascal не
может обрабатывать .OBJ файлы с более чем 256 объявлениями EXTRN.
54. OF expected (ожидается
ключевое слово OF)
55. INTERFACE expected
(ожидается ключевое слово interface)
56. Invalid relocatable
reference (неправильная переместимая ссылка)
— .OBJ файл содержит
данные и переместимые ссылки в сегментах, отличных
от CODE. Например,
Вы пытаетесь объявить инициализированные
переменные в сегменте DATA.
— .OBJ файл
содержит ссылки размером в байт на переместимые символы . Эта
ошибка происходит, если используются операторы HIGH и LOW с перемеcтимыми
символами или, если есть ссылка на переместимые символы в директивах
DB.
— Операнд ссылается
на переместимый символ, который не был определен ни в сегменте
CODE, ни в сегменте DATA.
— Операнд
ссылается на процедуру или функцию
EXTRN со смещением, например, CALL SortProc +8.
57. THEN expected (ожидается
ключевое слово then)
58. TO or
DOWNTO expected (ожидается ключевое слово to или downto)
59. Undefined
forward (не определен элемент, указанный ранее)
— Эта процедура
или функция была объявлена в интерфейсной части модуля,
но ее определение не встречается нигде
в части реализации.
— Эта процедура или функция
была объявлена с ключевым словом forward, но ее определение
нигде не обнаружено.
60. Too many procedure
(слишком много процедур)
Turbo Pascal
не допускает более 512 процедур или функций в модуле.
Если компилируется программа, то
нужно переместить несколько процедур или функций в модуль.
Если компилируется модуль, то его нужно разбить на два или более модулей.
61. Invalid typecast
(неправильное приведение типов)
— Размеры ссылки
на переменную и тип назначения отличаются при приведении типа переменной.
— Попытка приведения
типов в выражении, где допустима только ссылка на переменную.
62. Division by
zero (деление на ноль)
Попытка деления
на ноль.
63. Invalid file
type (неправильный тип файла)
Этот тип файла не поддерживается процедурой обработки файлов, например, readln
c типированным файлом или Seek c текстовым файлом.
64. Cannot Read or Write
variables of type (нельзя читать или писать переменные этого типа)
— Read
или Readln могут вводить значения
типа Char, Integer, Real, и String.
— Write или
Writeln могут выводить
значения типа Char, Integer, Real, String и Boolean.
65. Pointer
variable expected (ожидается переменная типа указатель)
Предыдущая переменная
должна иметь тип указатель.
66. String variable
expected (ожидается строковая переменая)
Предыдущая переменная
должна быть строкового типа.
67. String expession expected (ожидается выражение строкового типа)
Предыдущее выражение
должно быть строкового типа.
68. Circular unit
reference (циклическая ссылка на модуль)
Не допускается,
чтобы два модуля использовали друг друга:
unit U1; unit U2;
uses U2; uses U1;
… …
В этом примере
при выполнении MAKE для любого модуля будет
генерироваться ошибка 68.
69. Unit name mismatch
(несоответствие имени модуля)
Имя модуля, найденного
в .TPU файле , не соответствует имени, заданному в предложении USES.
70. Unit version mismatch
(несоответствие версии модуля)
Один или более
модулей, используемых данным модулем были изменены
после компиляции этого модуля. Для
автоматической компиляции модулей, которым
нужна перекомпиляция, нужно использовать
Compile/Make или Compile /Build в интегрированной
среде или опции / М или /В в компиляторе командной строки.
71. Duplicate
unit name (дублированное имя модуля)
В предложении
USES уже указано это имя модуля.
72. Unit file
format error (ошибка в формате файла модуля )
.TPU файл
почему-то неправильный; убедитесь,что этот файл
фактически является .TPU файлом.
73. Implementation
expected (ожидается ключевое слово
implementation)
74. Constant and
case types do not match (константа и тип
переключателя в операторе case не соответствуют друг другу)
Тип константы
оператора case несовместим с выражением переключателя в предложении case.
75. Record
variable expected (ожидается переменная типа record)
Предыдущая переменная
должна иметь тип record.
76. Constant
out of range (константа выходит за допустимый диапазон)
— Попытка индексировать
массив с помощью константы, выходящей за допустимый диапазон.
— Попытка присвоить
переменной константу, выходящую за допустимый диапазон.
— Попытка передать
константу, выходящую за допустимый
диапазон, в качестве параметра процедуры или функции.
77. File variable
expected (ожидается переменная типа file)
Предыдущая переменная
должна иметь тип file.
78. Pointer
expression expected (ожидается выражение типа
pointer).
79. Integer or
real expression expected (ожидается выражение типа integer
или real).
80. Label
not within current block (метка находится вне текущего блока).
Оператор goto
не может ссылаться на метку, находящуюся вне
текущего блока.
81. Label already
defined (метка уже определена)
Эта метка уже
помечает некоторый оператор.
82. Undefined
label in preceding
statement part (неопределенная метка в предыдущей
операторной части)
Эта метка была
объявлена и на нее есть ссылка в предыдущей
операторной части, но эта метка нигде не определена.
83. Invalid @ argument
(неправильный аргумент для @ )
Правильными аргументами
являются ссылки на переменные и идентификаторы
процедур или функций.
84. UNIT expected (ожидается
ключевое слово UNIT)
85. «;» expected
(ожидается ; )
86. «:» expected
(ожидается : )
87. «,» expected
(ожидается , )
88. «(» expected
(ожидается ( )
89. «)» expected
(ожидается ) )
90. «=» expected
(ожидается = )
91. «:=» expected
(ожидается := )
92. «[» or
«(.» expected (ожидается [ или (. )
93. «]» or
«.)» expected (ожидается ] или .) )
94. «.» expected
(ожидается . )
95. «..» expected
(ожидается .. )
96. Too many variables
(слишком много переменных)
— Общий размер
глобальных переменных, объявленных внутри программы
или модуля, не может превышать 64К.
— Общий размер
локальных переменных, объявленных внутри
процедуры или функции, не может превышать 64К.
97. Invalid FOR
control variable (неправильная управляющая переменная в
операторе for)
Управляющая переменная
в операторе for должна быть простой переменной,
определенной в описании текущей подпрограммы.
98. Integer variable
expected (ожидается переменная целого типа)
Предыдущая переменная
должна быть целого типа.
99. File and procedure
types are not allowed here (файловый и процедурный тип недопустимы
здесь)
Типированная константа
не может быть типа файлового или процедурного
типа.
100. String length mismatch
(длина строки не соответствует)
Длина строковой
константы не соответствует количеству компонент в символьном массиве.
101. Invalid
ordering of fields (неправильное упорядочивание полей)
Поля констант
типа record должны быть записаны в порядке объявления.
102. String
constant expected (ожидается константа типа string)
103. Integer or
real variable expected (ожидается переменная типа Integer
или Real)
Предыдущая переменная
должна быть типа Integer или Real.
104. Ordinal
variable expected (ожидается переменная порядкового типа )
Предыдущая переменная
должна быть порядкового типа .
105. INLINE error
(ошибка в INLINE)
Оператор < не допустим в сочетании с перемещаемыми ссылками на переменные, такие
ссылки всегда имеют размер, равный слову.
106. Character
expession expected (ожидается выражение
символьного типа)
Предыдущее выражение
должно быть типа Сhar.
107. Too many
relocation items (слишком много перемещаемых
элементов)
Размер перемещаемой
части таблицы в .EXE файле превышает 64К, что является верхним пределом
в Turbo Pascal. Если эта ошибка возникает,
то это означает, что данная программа слишком большая
для обработки редактором связей Turbo Pascal. Вероятно,
она будет слишком большой для выполнения в
DOS . В этом случае нужно разделить программу
на «главную» часть, которая выполняет две или
более «подпрограмм», используя процедуру EXEC в модуле Dos.
112. Case constant
out of range (константа оператора case выходит за
допустимый диапазон)
Для операторов
case целого типа константы должны быть внутри диапазона
-32768…32767.
113. Error in statement
(ошибка в операторе)
С этого символа не может
начинаться оператор.
114. Cannot call
an interrupt procedure (нельзя вызывать процедуру
прерывания)
116. Must be in
8087 mode to compile this (для компиляции этой конструкции должен быть
режим 8087)
Эта конструкция
может компилироваться только в состоянии {$N+}.
Операция над 8087 типами Single, Double, Extended
и Comp недопустимы в состоянии {$N-}.
117. Target address
not found (искомый адрес не найден)
Команда Compile/Search
Find Error в интегрированной среде или опция /F в версии командной строки
не может определить оператор, который соответствует
данному адресу.
118. Include files
are not allowed here (здесь недопустимы включаемые
файлы)
Каждая операторная
часть должна полностью содержаться в данном файле.
120. NIL expected (ожидается
NIL)
121. Invalid Qualifier
(неправильный квалификатор)
— Попытка индексировать
переменную, которая отсутствует в массиве.
— Попытка задать
поля в переменной, которая не является
записью.
— Попытка
получить значение, на
которое указывает переменная, не являющаяся указателем.
122. Invalid
variable reference (неправильная ссылка на переменную)
Предыдущая конструкция
следует синтаксису ссылки
на переменную, но не обозначает размещение памяти. Наиболее вероятно,
Вы вызвали функцию указателя, но забыли получить
значение, на которое указывает результат.
123. Too many
symbols (слишком много символов)
Программа или
модуль объявляет более 64К символов. Если
программа или модуль компилируется с опцией {$D+}, то попробуйте ее
выключить — заметим, однако, что
это будет препятствовать нахождению ошибок выполнения
в этом модуле. В противном
случае, можно попробовать переместить
несколько объявлений в отдельный модуль.
124. Statement
part too large (операторная часть слишком
большая)
Turbo Pascal
ограничивает размер операторной части около 24К. Если встречается эта
ошибка, то переместите разделы операторной части
в одну или более процедур. В любом случае, если
программа имеет операторную часть такого размера, то имеет
смысл прояснить структуру этой программы.
126. Files
must be var parameters (файлы
должны быть переменными параметрами)
Попытка объявить
значение параметра файлового типа. Параметры файлового типа должны
быть переменными параметрами.
127. Too many conditional
symbols (слишком много условных символов)
Для определения
дополнительных условных символов недостаточно места. Попытайтесь
исключить несколько символов или укоротить несколько
символических имен.
128. Misplaced
conditional directive (неправильно расположенная условная директива)
Компилятор встретил
директиву {$ELSE} или {$ENDIF} без
соответствующей директивы {$IFDEF}, {$IFNDEF} или {$IFOPT}.
129. ENDIF directive
missing (отсутствует директива ENDIF)
Исходный файл заканчивается
внутри конструкции условной компиляции.
В исходном файле должно быть одинаковое количество
директив {$IFxxx} и {$ENDIF}.
130. Error in initial
conditional defines (ошибка в начальных условных определениях)
Начальные условные
символы, заданные в Options/ Compiler/ Conditional
defines или в директиве /D, неправильные. Turbo Pascal ожидает,
что 0 или более иденитификаторов разделяются пробелами,
запятыми или точками с запятой.
131. Header does
not match previous definition (заголовок не соответствует
предыдущему определению)
— Заголовок
процедуры или функции, заданный в интерфейсной части
или в объявлении forward, не соответствует данному заголовку.
132. Critical
dick error (критическая ошибка диска)
Критическая ошибка
произошла во время компиляции (например, ошибка неготовности носителя)
133. Cannot
evaluate this expression (нельзя вычислить это выражение)
Попытка использовать
неподдерживаемое Turbo Pascal свойство в константном выражении
или в отладочном выражении. Например, Вы пытаетесь
использовать функцию Sin в объявлении константы, или Вы
пытаетесь вызвать функцию, определенную пользователем, в отладочном
выражении. Описание допустимого синтаксиса конкретных
выражений приведено в главе 1 «Лексемы и константы».
Описание допустимого синтаксиса отладочных выражений приведено
в главе 5 Руководства пользователя «Отладка программ
на Turbo Pascal».
134. Expession
incorrectly terminated (выражение завершается неправильно)
Turbo Pascal ожидает
или оператор, или конец выражения в этой точке, но ничего не находит.
135. Invalid
format specifier (неправильный спецификатор
формата )
Используется неправильный
спецификатор формата или числовой аргумент спецификатора
формата выходит за допустимый диапазон. Список
правильных спецификаторов формата приведен в
главе 5 Руководства пользователя «Отладка программ
на Turbo Pascal».
136. Invalid
indirect reference (неправильная косвенная
ссылка)
Оператор пытается
сделать неправильную косвенную ссылку.
Например, используется absolute переменная,
у которой базовая переменная неизвестна в текущем
модуле или используется inline программа, которая
ссылается на переменную, неизвестную в текущем модуле.
137. Structured variables
are not allowed here (структурные переменные недопустимы
здесь)
Попытка выполнить не поддерживаемую Turbo Pascal операцию над структурной переменной.
Например, попытка умножить две записи.
138. Cannot evaluate
without System unit (Нельзя вычислить без модуля System)
Библиотека TURBO.TPL
должна содержать модуль System для того,
чтобы отладчик мог вычислить выражение.
139. Cannot access
this symbol (невозможен доступ к этому
символу)
Все множество
символов в программе доступно сразу после
компиляции программы. Однако, к некоторым символам,
таким как переменные, невозможен доступ до
тех пор, пока программа не начинает фактически
выполняться.
140.Invalid floating-point
operation (Неправильная операция с плавающей точкой)
Операция над
двумя значениями вещественного типа привела к переполнению
или является делением на ноль.
141. Cannot compile
overlay to memory (нельзя компилировать оверлей в память)
Программа, которая
использует оверлеи, должна компилироваться на диск.
142. Procedure
or function variable expected (ожидается
переменная типа procedure или function)
В этом контексте
оператор адреса (@) может использоваться только с
переменной процедуры или функции.
143. Invalid procedure
or function reference (неправильная ссылка на процедуру
или функцию)
— Если процедура
или функция должны быть присвоены переменной типа procedure, то
их нужно компилировать в состоянии {$F+} и их нельзя объявлять
с ключевыми словами inline или interrupt.
— Вы пытаетесь вызвать
процедуру в выражении.
144. Cannot overlay
this unit (нельзя сделать этот модуль
оверлейным)
Попытка сделать
оверлейным модуль, который
не был откомпилирован в состоянии {$O+}.
147 Object type expected
(Ожидается объектный тип.)
Идентификатор не является объектным типом.
148 Local object
types are not allowed. (Локальный объектный тип недопустим.)
Объектный тип
может быть определен только в самой внешней
сфере действия программы или модуля. Определение объектного типа внутри процедур или функций недопустимо.
149 VIRTUAL expected.
(VIRTUAL ожидается.)
Пропущено ключевое
слово VIRTUAL.
150 Method
identifier expected. (Идентификатор метода ожидается.)
Идентификатор
не является методом.
151 Virtual
constructors are not allowed. (Виртуальные констракторы неразрешены.)
Констрактор-метод
должен быть статическим.
152 Constructor
identifier expected. (Идентификатор
констрактора ожидается.)
Идентификатор
не является констрактором.
153 Destructor
identifier expected. (Идентификатор дестрактора ожидается.)
Идентификатор
не является дестрактором.
154 Fail
only allowed withing constructors. (Fail допустим
только внутри констракторов.)
Стандартная процедура
Fail может быть использована только внутри констракторов.
155. Invalid
combination of opcode and operands (Неверная
комбинация кода операции и операндов)
Код операции
не допускает такой комбинации операндов. Возможные причины:
— Слишком много
или слишком мало операндов для этого кода операции;
например
INC AX, BX или MOV AX
— Правильное число
операндов, но их тип или порядок не соответствуют коду операции; например
DEC 1, MOV AX,CL или MOV 1,AX
156. Memory reference
expected (Ожидается ссылка на память)
Этот операнд не
ссылка на память, которая ожидается здесь. Вероятно, Вы
забыли поставить [] вокруг регистрового операнда. Например
MOV AX, BX+SI
вместо MOV AX, [BX+SI]
157. Cannot
add or subtract relocatable symbols (Нельзя
складывать или вычитать переместимые символы)
Над переместимыми
символами можно выполнять только сложение и вычитание констант.
Переменные, процедуры, функции и метки — это переместимые
символы. Считая, что Var — это переменная, а Const — это
константа, инструкции MOV AX, Const+Const и MOV AX, Var+Const — верны,
а MOV AX, Var+Var — нет.
158. Invalid
register combination (Неверная комбинация
регистров)
Правильные индексные
регистровые комбинации: [BX], [BP], [SI], [DI], [BX+SI], [BX+DI],
[BP+SI], [BP+DI]. Другие индексные
регистровые комбинации (такие, как [AX], [BP+BX], [SI+DX]) — не разрешены.
Примечание: Локальные
переменные (переменные, объявленные в процедурах и
функциях) всегда распределяются в стеке и доступ к ним производится
через регистр BP. Ассемблер автоматически добавляет
[BP] в ссылках на такие переменные. Так, что даже хотя конструкция
такая, как Local[BX] (где Local — локальная переменная) появляется
правильной, это не так, поскольку результирующий
операнд будет: Local[BP+BX].
159. 286/287 Instructions
are not enabled (Инструкции 286/287 не разрешены.)
Используйте директиву
компилятора {$G+}, чтобы разрешить коды операций 286/287,
но помните, что результирующий код не может выполняться на компьютерах с 8086 или 8088.
160. Invalid symbol reference
(Неверная ссылка на символ)
К этому
символу нельзя обращаться в ассемблерном операнде.
Возможные причины:
— Вы пытаетесь
обратиться в ассемблерном операнде к стандартной процедуре, стандартной функции или специальным массивам
Mem, MemW, MemL, Pоrt, PortW.
— Вы пытаетесь обратиться
в ассемблерном операнде к константе типа строка, плававающая точка
или множество.
— Вы пытаетесь обратиться
к специальному символу @Result вне функции.
— Вы пытаетесь обратиться
в ассемблерном операнде к inline процедуре или
функции.
— Вы пытаетесь сгенерировать
короткую JMP инструкцию, которая переходит на что-либо отличное
от метки.
161. Code generation
error (Ошибка генерации кода)
Предыдущая операторная
часть содержит инструкцию: LOOPNE, LOOPE, LOOP или
JCXZ, которая не может достичь метки назначения.
162. ASM expected (Ожидается
ASM)
[начало] [оглавление]
Ошибки времени выполнения.
Некоторые ошибки
во время выполнения программы приводят
к тому, что программа выводит на дисплей
сообщение об ошибке и завершается:
Run-time error
nnn at xxxх:yyyy (ошибка выполнения nnn по адресу
xxxх:yyyy, где nnn-номер
ошибки выполнения, а xxxx:yyyy —
адрес ошибки выполнения (сегмент и смещение))
Ошибки выполнения разделены
на четыре категории:
ошибки операционной системы DOS:1-99
ошибки ввода/вывода:100-149
критические ошибки :150-199
фатальные ошибки:200-255.
[начало] [оглавление]
Ошибки операционной системы DOS.
1. Invalid function
number (Неверный номер функции)
Вы вызываете несуществующую
функцию DOS.
2. File not found
(файл не найден)
Сообщается процедурами
Reset, Append, Rename или Erase, если имя назначенное файловой
переменной не задает существующий файл.
3. Path not fond
(путь не найден)
— Сообщается процедурами
Reset, Rewrite, Append, Rename или Erase, если
имя, назначенное файловой переменной, неправильное или задает
несуществующий подсправочник.
— Сообщается
процедурами Chdir, Mkdir или Rmdir, если путь доступа
неправильный или задает несуществующий подсправочник.
4. Too many open
files (слишком много открытых файлов)
Сообщается процедурами
Reset, Rewrite или Append,
если программа имеет слишком много открытых
файлов. DOS никогда не разрешает более 15 открытых файлов на процесс.
Если встречается эта ошибка, когда открытых файлов меньше 15,
то это может указывать на то, что файл CONFIG.SYS не содержит
запись FILES =XX или, что эта запись задает слишком
мало файлов. Увеличьте это количество до некоторого
подходящего значения, например, до 20.
5. File access denied
(запрещен доступ к файлу)
— Сообщается
процедурами Reset или Append, если FileMode
разрешает запись, а имя, назначенное файловой переменной, задает справочник или файл, предназначенный только для считывания.
— Сообщается процедурой
Rewrite, если справочник заполнен или если имя, присвоенное
файловой переменной, задает справочник или существующий
файл, предназначенный только для считывания.
— Сообщается процедурой
Rename, если имя, присвоенное файловой переменной, задает
справочник или если новое
имя задает существующий файл.
— Сообщается процедурой
Erase, если имя, присвоенное файловой переменной, задает
справочник или файл, предназначенный только для считывания.
— Сообщается процедурой
MkDir, если файл с таким именем существует
в «родительском «справочнике, или
если путь доступа задает устройство, или если нет места в «родительском» справочнике.
— Сообщается процедурой
RmDir, если справочник непустой; если путь доступа не задает справочник,
или если путь доступа задает корневой справочник.
— Сообщается процедурой
Read или BlockRead для типированного или нетипированного
файла, если этот файл не открыт для чтения.
— Сообщается процедурой
Write или BlockWrite для типированного или нетипированного файла, если
этот файл не открыт для записи.
6. Invalid file
handle (неправильный обработчик файла)
Эта ошибка сообщается,
если неправильный обработчик файла передается
вызову системы DOS. Это
никогда не должно происходить; если
это случается, то это указывает,что файловая
переменная каким-то образом запорчена.
12. Invalid file
access code (неправильный код доступа к файлу)
Сообщается процедурами Reset или Append для типированного или нетипированного файла,если значение
FileMode неправильное.
15. Invalid drive number
(неправильный номер устройства)
Сообщается процедурой
GetDir или ChangeDir, если номер устройства неправильный.
16. Cannot
remove current directory (нельзя удалять текущий справочник)
17. Cannot rename
across drives (нельзя переименовывать файлы, находящиеся на различных
устройствах)
Сообщается процедурой
Rename, если оба имени находятся на различных
устройствах.
[начало] [оглавление]
Ошибки ввода/вывода.
Эти ошибки
вызывают завершение программы, если этот оператор был откомпилирован
в состоянии {$I+}. В состоянии {$I-} программа продолжает
выполняться, а ошибка сообщается функцией IOResult.
100. Disk read error
(ошибка чтения с диска)
Сообщается процедурой
Read для типированного файла, если делается
попытка чтения после конца файла.
101. Disk write
error (ошибка записи на диск)
Сообщается процедурами
Close, Write, Writeln, Flush или Page, если диск становится полным.
102. File not
assigned (файл не назначен)
Сообщается процедурами
Reset, Rewrite, Append, Rename или Erase,
если файловой переменной не было присвоено имя с помощью
вызова Assign.
103. File not
open (файл не открыт)
Сообщается процедурами
Close, Read, Write, Eof, FileSize, Flush, BlockRead
или BlockWrite, если файл не открыт.
104. File not
open for input (файл не открыт для ввода)
Сообщается процедурами
Read, Readln, Eof, Eoln, SeekEof, SeekEoln
для текстовых файлов, если файл не открыт для ввода.
105. File not
open for output (файл не открыт для вывода)
Сообщается процедурами
Write и Writeln для текстовых файлов, если файл не открыт для
вывода.
106. Invalid numeric
format (неправильный числовой формат)
Сообщается процедурами
Read и Readln, если числовое значение, прочитанное
из текстового файла не соответствует правильному
числовому формату.
[начало] [оглавление]
Критические ошибки.
150. Disk is write-protected
(защита диска от записи)
151. Unknown unit
(неизвестное устройство)
152. Drive not
ready (устройство не готово)
153. Unknown command
(неизвестная команда)
154. CRC
error in data (ошибка циклического контроля по избыточности в данных)
155. Bad drive
reguest structure length (неправильный запрос устройства
о длине структуры)
156. Disk seek
error (ошибка поиска на диске)
157. Unknown media
type (неизвестный тип носителя)
158. Sector not
found (сектор не найден)
159. Printer out
of paper (на принтере нет бумаги)
160. Device write
fault (ошибка записи на устройство)
161. Device read
fault (ошибка чтения с устройства)
162. Hardware
failure (отказ аппаратного обеспечения)
Более подробная
информация о критических ошибках приведена в Руководстве программиста
для DOS.
[начало] [оглавление]
Фатальные ошибки.
Эти ошибки всегда
сразу же завершают программу.
200. Division
by zero (деление на ноль)
201. Ошибка
выхода за допустимый диапазон. Эта ошибка сообщается операторами, откомпилированными в состоянии {$R+},
когда возникает одна из следующих ситуаций:
— Индексное
выражение квалификатора массива выходит за допустимый диапазон.
— Была сделана
попытка присвоить переменной значение,
выходящее за допустимый диапазон.
— Была сделана
попытка передать процедуре или функции в качестве параметра значение, выходящее за допустимый диапазон.
202. Stack overflow
error (ошибка переполнения стека)
Эта ошибка сообщается
при входе в процедуру или функцию, откомпилированную
в состоянии {$S+}, когда в стеке нет достаточно места для
размещения локальных переменных подпрограмм. Увеличьте
размер стека с помощью директивы компилятора $M.
Эта ошибка может
возникать так же из-за бесконечной рекурсии.
203. Heap overflow
error (ошибка переполнения кучи)
Эта ошибка
сообщается процедурами New или GetMem , когда в куче
нет достаточно места для размещения блока требуемого размера.
Более подробное описание монитора кучи
приведено в главе 16 «Память».
204. Invalid
pointer operation (неправильная операция с указателем)
Эта ошибка
сообщается процедурами Dispose или FreeMem, если указатель
равен nil или указывает на позицию за пределами кучи или, если свободный
список не может быть расширен из-за того, что список свободных блоков
полон, или HeapPtr находится слишком близко от нижней границы списка свободных блоков.
205. Floating
point overflow (переполнение с плавающей точкой)
Операция с
плавающей точкой обрабатывает слишком большое для Turbo Pascal
или сопроцессора число.
206. Floating
point underflow (потеря значности при операции с плавающей точкой)
Операция с
плавающей точкой приводит к потере значности. Эта ошибка сообщается,
если только используется числовой сопроцессор 8087
с контрольным словом, которое не маскирует потерю значности
По умолчанию, потеря значности вызывает
возвращение нулевого результата.
207. Invalid floating
point operation (неправильная операция с плавающей точкой)
— Вещественное
значение, передаваемое Trunc или Round,
не может быть преобразовано в целое внутри диапазона для типа
LongInt (-2147483648 до 214783647)
— Аргумент, передаваемый
функции Sgrt, является отрицательным числом.
— Аргумент,
передаваемый функции Ln, равен
нулю или отрицательный.
— Произошло
переполнение стека сопроцессора 8087.
Более подробное описание корректного программирования при
использовании сопроцессора 8087 приведено в главе 14 «Использование
8087»
208. Overley
manager not installed (монитор оверлеев не инсталирован)
Программа вызывает
оверлейную процедуру или функцию, но
монитор оверлеев не инсталирован.
Наиболее вероятно, что
Вы не вызвали OvrInit или вызов OvrInit был неудачным. Заметим,
что если код инициализации находится в любом из
оверлейных модулей, то нужно создать дополнителный
неоверлейный модуль, который вызывает OvrInit и использовать
этот модуль перед любым из оверлейных модулей. Полное описание
монитора оверлеев приведено в главе 13 «Модуль Overlay» .
209. Overlay file
read error (ошибка чтения оверлейного файла)
Произошла ошибка
чтения, когда монитор оверлеев пытался
прочитать оверлей из оверлейного файла.
210. Object not
initialized. (Объект не инициализирован)
Когда включена
проверка диапазона, Вы вызываете виртуальный метод
объекта до инициализации объекта через вызов констрактора.
211. Call to abstract
method. (Вызов абстрактного метода)
Эта ошибка
генерируется процедурой Abstract в модуле Objects; она указывает,
что Ваша программа пытается выполнить абстрактный витруальный
метод. Когда объектный тип содержить один или
более абстрактных методов, он называется абстрактным
объектным типом. Будет ошибкой создавать экземпляры
объектов абстрактного типа — абстрактные типы существуют
только для того, чтобы Вы могли
наследовать от них и перекрывать абстрактные методы.
Например, метод
Compare типа TSortedCollection в модуле
Objects абстрактный, указывает на то,
что для реализации отсортированного набора
Вы должны создать объектный тип, который наследуется от
TSortedCollection и перекрывает метод Compare.
212. Stream registration
error. (Ошибка регистрации потока)
Эта ошибка
генерируется процедурой RegisterType в модуле Objects, указывая, что возникла одна из ошибок:
— Запись регистрации
потока не размещается в сегменте данных.
— Поле ObjType
записи регистрации потока = 0.
— Тип уже зарегистрирован.
— Существует другой
тип с тем же значением ObjType.
213. Collection
index out of range. (Индекс набора выходит за пределы)
Индекс, переданный
в метод из TCollection, выходит за пределы.
214. Collection
overflow error. (Ошибка переполнения набора)
Эта ошибка выдается
TCollection при попытке добавить элемент, когда набор не может
быть расширен.
[начало]
[оглавление]
Предыдущая
страница | Следующая
страница![]()