Модератор: Модераторы
Error 103
После компилирования при запуске возникает ошибка:
Runtime error 103 at <адрес>
В программе нету работы с файлами.
Есть только обращение к таким процедурам
WRITEln(‘N=’);
READLN(N);
READLN;
В ошибке указан номер строчки , которой соответствует WRITEln(‘N=’);
Компилирую из командной строки(.bat фай) такого содержания
fpWbinwin32ppc386 -Sd -Sg -Un -O1 -Xs -gl %1
Компилятор версии 1.0.10 [2003/06/27].
Также пробовал версию 2.4.4 [2011/04/23]. При компилировании из командной строки ошибка таже самая,
а вот при компилировании из-под оболочки fp.exe всё компилируется и запускается без ошибок.
В чем может быт причина возникновения такой ошибки 103 и как ее устранить?
- Mavlyudov
- новенький
- Сообщения: 50
- Зарегистрирован: 24.01.2010 20:35:23
Re: Error 103
Сквозняк » 12.12.2011 04:48:52
Многие процедуры паскаля, в частности writeln, на нём не реализованы а представляют собой обёртку к системным функциям написанным на языке C. То есть, если очень постараться, можно словить баги этого языка. Попробуй компилировать из коммандной строки не компилятором ppc386 а более для этого предназначенным fpc и без опций. Если заработает, то компилируй снова и добавляй каждый раз по одной новой опции, так ты узнаешь, какая из них вызывает ошибку. Если не поможет, то пример кода вызвающий ошибку в студию
- Сквозняк
- энтузиаст
- Сообщения: 1048
- Зарегистрирован: 29.06.2006 22:08:32
Re: Error 103
Sergei I. Gorelkin » 12.12.2011 08:45:06
Скорее всего не хватает ключа -Wg или директивы {$apptype console} в начале программы.
-
Sergei I. Gorelkin - энтузиаст
- Сообщения: 1390
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
-
- Профиль
- ICQ
Re: Error 103
Mavlyudov » 13.12.2011 03:12:11
Сквозняк
Я предполагал, что fpc (или fp) использует ppc386 при компиляции, поэтому искал файл настроек с директивами, которые можно прописать и в командной строке. Как оказалось, fp и ppc386 — два независимых приложения.
Sergei I. Gorelkin
Видимо, речь все таки идет о ключе ключе -WС. Да, теперь компилируется.
Но при компиляции компилером версии 1.0.10 возникла другая ошибка 203. Переполнение кучи.
Runtime error 203 at адрес
и еще несколько адресов ниже
указана строка с кодом GetMem(ARRM[I], sizeof(ARRM[I]^));
При использовании компилятора версии 2.4.4 такой ошибки не возникает. Но нужно разобраться именно с ошибкой компилятора более ранней версии.
Компилирую как и раньше командной строкой через ppc386.
Настройки .bat файла:
FPC2.4.4bini386-win32ppc386 -Sd -Sg -Un -O1 -Xs -gl %1 -FU<директория модулей> -Foc:<директория модулей> -WC -WN
При запуске программы предполагается ввод большого числа(например, 20000), так чтобы выполнилась часть кода в except.
Вот код:
- Код: Выделить всё
program Project4;
//uses Windows, SysUtils, dos;
{ H+}
{ mode Delphi}
{ apptype console}const
NNMAT=30000;{8100;}{4096;}{16380;}
NNARR=30000;type
MAS = array [0..NNMAT-1] of Double;
ARR = ^MAS;
MAS2 = array [0..NNARR] of ARR;
PMAS2 = ^MAS2;var {-------------------------------}
NMAT0, NMAT: INTEGER;
ARRM: array [0..NNARR] of ARR;
ARR0: ARR;
GE:DWORD;procedure MAT_PRED(N:INTEGER);
var
NN, I: LONGINT;
begin
NN:= SQR(N);
I:= 0;
NMAT:= 0;while (NMAT < NN) AND (I < NNARR) DO
begin
try
GetMem(ARRM[I], sizeof(ARRM[I]^));
//sizeof(Double)*NNMAT
except
Writeln('It was GOTO',#$20,I,#$20,NMAT);
Dec(NMAT);
end;
Inc(I);
Inc(NMAT, NNMAT);
// writeln(I,' ',NMAT,' '{,MEMAVAIL,' ',MAXAVAIL});
end;
NMAT0:= NMAT;
Writeln(I,' ',NMAT0);
end;{MAT_PRED}var
N: INTEGER;
begin
WRITEln('N=');
READLN(N);
MAT_PRED(N);
WRITELN('Filled Memory: ',SQRT(NMAT0):9:3);
READLN;
end.
- Mavlyudov
- новенький
- Сообщения: 50
- Зарегистрирован: 24.01.2010 20:35:23
Re: Error 103
Сквозняк » 13.12.2011 06:54:25
- Код: Выделить всё
{$mode Delphi}
Без значка $ мой компилятор директиву не принимает.
Используя ppc386 напрямую, ты без пользы ломаешь кроссплатформенность своего скрипта — в каждой платформе этот компилятор называется по разному.
- Сквозняк
- энтузиаст
- Сообщения: 1048
- Зарегистрирован: 29.06.2006 22:08:32
Re: Error 103
Mavlyudov » 14.12.2011 01:45:22
Сквозняк
У меня без $, т.к. закомментированы. Все режимы выставлены через командную строку в ключах.
Вопрос не в кроссплатформенности, а в том, как отладить приведенный код
- Mavlyudov
- новенький
- Сообщения: 50
- Зарегистрирован: 24.01.2010 20:35:23
Re: Error 103
Sergei I. Gorelkin » 14.12.2011 14:15:28
Исключения обрабатываются только при подключенном модуле sysutils. Если он закомментарен, то вылет с runtime error — нормальное поведение.
-
Sergei I. Gorelkin - энтузиаст
- Сообщения: 1390
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
-
- Профиль
- ICQ
Вернуться в Free Pascal Compiler
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Exit code=103
, Где ошибка?
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Senior Member Рейтинг (т): 13 |
Program GamersCreate; Uses Crt; Type AlliansGamers = Record Nik : string[25]; x,y : array[1..15] of Byte; end; Var SIn,Sn,Sx,Sy : String; FIn : Text; FOut : file of AlliansGamers; AV : AlliansGamers; step,j,ni,Code : Integer; Begin ClrScr; Write(‘ Введите название файла (без расширения): ‘); ReadLn(SIn); Assign(FIn,SIn+’.txt’); Reset(FIn); Assign(FOut,SIn+’.als’); ReWrite(FOut); step:=1; Repeat Case step of 1 : begin If Not Eof(FIn) then begin Close(FIn); Close(FOut); end else begin ReadLn(FIn,SIn); step:=2; end; end; 2 : begin For j:=1 to 15 do begin AV.x[j]:=0; AV.y[j]:=0; end; j:=0; ni:=Pos(‘#’,SIn); If ni=0 then step:=1 else begin Inc(ni); step:=3; end; end; 3 : begin If SIn[ni]=’ ‘ then If SIn[ni+1]=’ ‘ then begin step:=5; AV.Nik:=Sn; end else step:=4 else step:=4; end; 4 : begin Sn:=Sn+SIn[ni]; Inc(ni); step:=3; end; 5 : begin If Not Eof(FIn) then begin Close(FIn); Close(FOut); end else begin Sx:=»; Sy:=»; ReadLn(FIn); ni:=Pos(‘[‘,SIn); If ni=0 then If (Pos(‘#’,SIn)>0) then begin Write(FOut,AV); step:=2; end else step:=5 else begin Inc(ni); step:=6; end; end; end; 6 : begin If SIn[ni]=’:’ then begin Inc(ni); step:=7; end else begin Sx:=Sx+SIn[ni]; Inc(ni); step:=6; end; end; 7 : begin If SIn[ni]=’]’ then begin Inc(j); Val(Sx,AV.x[j],Code); Val(Sy,AV.y[j],Code); step:=5; end else begin Sy:=Sy+SIn[ni]; Inc(ni); step:=7; end; end; end; Until False; End. Программа компилируется, запускается. Сразу после ввода имени файла программа вылетает, IDE показывает ошибку 103. Что не так в программе? Нашел текст ошибки: Но не могу понять где и почему происходит ошибка. ОС: Windows XP |
volvo877 |
|
Moderator Рейтинг (т): 878 |
Цитата Polinom2686 @ 17.10.09, 17:07 Но не могу понять где и почему происходит ошибка. Файл с введенным_именем.TXT в текущей папке присутствует? Тогда присоедини его тоже сюда (в архиве, чтоб можно было посмотреть, где именно у тебя вылетает программа). У меня с пустым файлом она просто зависает, а не вылетает. |
Polinom2686 |
|
Senior Member Рейтинг (т): 13 |
Программа должна разобрать этот файл. Добавлено 17.10.09, 17:33 |
Polinom2686 |
|
Senior Member Рейтинг (т): 13 |
volvo877 |
|
Moderator Рейтинг (т): 878 |
Ошибка здесь:
Repeat Case step of 1 : begin If Not Eof(FIn) then begin Close(FIn); // <— Close(FOut); end … Смотри: ты при первом заходе в Case имеешь step = 1, конец файла НЕ достигнут, и ты файл закрыл… Что дальше? Что изменилось? Ничего, step все так же = 1, файл закрыт, попытка применить EOF к закрытому файлу приводит к тому, что ты видишь… Там точно нужен NOT? |
Polinom2686 |
|
Senior Member Рейтинг (т): 13 |
Спасибо, я сейчас посмотрю у себя в алгоритме. Добавлено 17.10.09, 17:54 |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- 32-битные компиляторы
- Следующая тема
[ Script execution time: 0,0292 ] [ 16 queries used ] [ Generated: 21.06.23, 21:14 GMT ]
Paul fawkes 1 / 1 / 0 Регистрация: 11.11.2016 Сообщений: 46 |
||||
1 |
||||
22.12.2016, 22:20. Показов 4674. Ответов 5 Метки нет (Все метки)
Помогите устранить ошибку
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
22.12.2016, 22:20 |
Ответы с готовыми решениями: Exitcode = 2 Exitcode = 2 Exitcode 201 Exitcode 200 5 |
Хитрая блондиночка $) 1471 / 986 / 399 Регистрация: 21.12.2015 Сообщений: 3,785 |
|
22.12.2016, 22:25 |
2 |
write(f, st); Не выйдет. Reset() открывает на чтение если это файл типа Text.
0 |
1 / 1 / 0 Регистрация: 11.11.2016 Сообщений: 46 |
|
22.12.2016, 22:29 [ТС] |
3 |
а как мне в одном файле все это провернуть?
0 |
Модератор 8324 / 4223 / 1602 Регистрация: 01.02.2015 Сообщений: 13,146 Записей в блоге: 4 |
|
22.12.2016, 22:45 |
4 |
а как мне в одном файле все это провернуть? На данном этапе обучения — никак.
0 |
Paul fawkes 1 / 1 / 0 Регистрация: 11.11.2016 Сообщений: 46 |
||||
22.12.2016, 22:59 [ТС] |
5 |
|||
Сделал так уже ошибка 102
0 |
Модератор 8324 / 4223 / 1602 Регистрация: 01.02.2015 Сообщений: 13,146 Записей в блоге: 4 |
|
23.12.2016, 07:43 |
6 |
Файлы на чтение и на запись открываются один раз перед обработкой, а не во время обработки Код открыть на чтение f1 открыть на запись f2 while not eof(f1) do обработка файла f1 закрыть f2 закрыть f1
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
23.12.2016, 07:43 |
Помогаю со студенческими работами здесь Ошибка exitcode 1 Exitcode 106 Exitcode = 104 var… Exitcode 201 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 6 |
Приложения написанные на Free Pascal могут генерировать ошибку времени выполнения (Run Time Error) когда в программе обнаруживаются определённые аварийные состояния . Этот документ содержит список возможных ошибок и описание их возможных причин.
1 Invalid function number (Неправильный номер функции)
Была попытка неправильного вызова системной функции.
2 File not found (Файл не найден)
Генерируется при попытке перенаименования, стирания или открытия несуществующего файла.
3 Path not found (Путь(директория) не найден)
Генерируется файловой системой когда путь не существует или неправелен.
Также генерируется при попытке получить доступ к несуществующему файлу.
4 Too many open files (Слишком много файлов открыто)
Максимальное число открытых файлов для вашего процесса было превышено.
Большинство операционных систем ограничивают максимальное число открытых файлов,
и эта ошибка может возникнуть когда этот лимит превышен.
5 File access denied (В доступе к файлу — отказано)
Было запрешено получение доступа к файлу. Эта ошибка может произойти по нескольким причинам:
-
При попытке открыть файл, предназначенный только для чтения или в деиствительности являющиёся директорией, для записи.
-
В данный момент занят или заблокирован другим процессом.
-
При попытке создания файла или директории с именем, которое совпадает с именем уже созданного файла или директории.
-
При попытке чтения из файла, открытого только для записи.
-
При попытке записи в файл, открытый только для чтения.
-
При попытке удалить директорию или файл, когда это не возможно.
-
При неимении прав на доступ к данному файлу.
6 Invalid file handle (Неправильный хэндл файла)
Происходит, когда используемая Вами файловая переменная была обнулена (испорчена); Это говорит о том, что память вашей программы была повреждена.
12 Invalid file access code (Неправильные ключи доступа к файлу)
Генерируется когда процедуры reset или rewrite вызываются с неправильным параметром FileMode.
15 Invalid drive number (Неправильный номер диска)
Генерируется когда в функции Getdir или ChDir был передан неправильный номер диска.
16 Cannot remove current directory (Невозможно удалить текущую директорию)
Генерируется при попытке удалить текущую директорию.
17 Cannot rename across drives (Можно переименовывать файлы только в пределах одного диска)
Вы не можете переименовать файл в файл, находяшиёся на другом диске или в другом разделе.
100 Disk read error (Ошибка чтения с диска)
Генерируется при невозможности произвести чтение с диска. Обычно происходит при попытке чтения данных, после его окончания.
101 Disk write error (Ошибка записи на диск)
Генерируется когда Вы пытаетесь записать данные на переполненый диск.
102 File not assigned (Файл не определён)
Генерируется функциями Reset, Rewrite, Append, Rename и Erase, При передаче в них файловой переменной, для которой не была выполнена функция AssignFile.
103 File not open (Файл не открыт)
Генерируется следующими функциями : Close, Read, Write, Seek, EOf, FilePos, FileSize, Flush, BlockRead, и BlockWrite если файл не был открыт.
104 File not open for input (Файл не открыт для чтения)
Генерируется функциями Read, BlockRead, Eof, Eoln, SeekEof и SeekEoln если файл не был открыт при помощи Reset.
105 File not open for output (Файл не открыт для записи)
Генерируется функцией write если текстовый файл не был открыт при помощи Rewrite.
106 Invalid numeric format(Неправильный числовой формат)
Генерируется когда ожидалось числовое значение, но из текстого файла было прочитано не было.
150 Disk is write-protected (Диск защищён от записи)
(Критическая ошибка)
151 Bad drive request struct length (Неправильная длина структуры запроса)
(Критическая ошибка)
152 Drive not ready (Устройство не готово)
(Критическая ошибка)
154 CRC error in data (Ошибка контрольной суммы в данных)
(Критическая ошибка)
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 (Сбой железа)
(Критическая ошибка)
200 Division by zero (Деление на ноль)
Приложение пыталось разделить число на ноль.
201 Range check error (Ошибка проверки границ)
Если вы компилировали прогамму с включённой провереой границ, Вы можете получить эту ошибку в следующих случаях:
-
Массив был вызван с индексом, выходящим за декларированые пределы.
-
Попытка присвоить значение переменной, выходящее за декларированые границы (для instance и enumerated типов).
202 Stack overflow error (Переполнение стека)
Стек превысил свой максимально допустимый размер (в этом случае необходимо уменьшить размер локальных переменных), или стек был повреждён. Эта ошибка генерируется только с включённой проверкой стека.
203 Heap overflow error (Переполнение кучи)
Размер кучи превысил максимально возможный размер. Генерируется при попытке выделить память непосредственно функциями New, GetMem и ReallocMem, или когда экземпляр класса или объекта создаётся и памяти не достаточно. Пожалуйста учтите что, по умолчанию, Free Pascal поддерживает увеличение кучи, то есть, если необходимо, будет произведена попытка её увеличения. Как бы то ни было, если размер кучи превысил максимально допустимый системой и
железом, то Вы получите эту ошибку.
204 Invalid pointer operation (Непрваильная операция с указателем)
Будет сгенерирована при вызове функций Dispose или Freemem с неправильным указателем (чаще всего, Nil)
205 Floating point overflow (Максимальная границы числа с плавающей точкой)
Вы попытались использовать или создать слишком большое число с плавающей точкой.
206 Floating point underflow (Минимальная граница числа с плавающей точкой)
Вы попытались использовать или создать слишком маленькое число с плавающей точкой.
207 Invalid floating point operation (Неправильная операция над числами с плавающей точкой)
Может генерироваться если вы попытались получить квадратный корень или логарифм отрицательного числа.
210 Object not initialized (Объект не инициализирован)
Если программа была скомпилирована с включенной проверкой границ, эта ошибка будет сгенерирована при попытке вызвать виртуальный метод до его конструктора.
211 Call to abstract method (Попытка вызова абстрактного метода)
Ваша программа попыталась вызвать абстрактный виртуальный метод. Абстрактные методы должны быть перекрыты, и только перекрытый метод должен быть вызван.
212 Stream registration error (Ошибка регистрации потока)
Генерируется когда неправильный тип регистрируется в модуле objects.
213 Collection index out of range (Индекс элемента коллекции выходит за допустимые границы)
Генерируется когда Вы попытались обратиться к элементу коллекции с выходящим за допустимые границы индексом (модуль objects).
214 Collection overflow error (Переполнение коллекции)
Размер коллекции превысил максимально допустимый размер, а Вы попытались добавить новый элемент (модуль objects).
215 Arithmetic overflow error (Арифметическое переполнение)
Эта ошибка генерируется когда результат операции превысил допустимые границы. В отличие to Turbo Pascal, эта ошибка генерируется только для 32-bit и 64-bit арифметических переполнений. Это происходит согласно тому, что все операнды конвертируются в 32-bit или 64-bit, до того как производить вычисления.
216 General Protection fault (GP Ошибка защиты памяти)
Приложение попыталось обратиться к недопустимому участку памяти. Это может быть вызвано следующими причинами:
-
Попытка получить разуказатель для nil.
-
Попытка получить доступ к выходящему за допустимые границы участку памяти (например, вызов move с неправильной длиной).
217 Unhandled exception occurred (Произошо неизвестное исключение)
Произошло исключение, и для него не существеет хэндла. Модуль sysutils устанавливает handler(менеджер), который отлавливает все исключения, и безопасно выходит в случае обнаружения оного.
219 Invalid typecast (Неправильное приведение типов)
Генерируется когда недопустимое приведение типов производится над классом используя оператор as. Эта ошибка также генерируется, когда объект или класс приводится к недопустимому объекту или классу, и виртуальный метод этого объекта или класса вызывается. Эта последняя ошибка детектируется только с использованием опции -CR компилятора.
227 Assertion failed error (Сбой утверждения)
Утверждение провалено, и процедурная переменная AssertErrorProc не была уcтановлена.
201 : range error
215 : overflow checking when doing computation with integer
202 : overflow stack
106 : invalid numeric format
1 : invalid function number
2 : file not found
3 : path not found
4 : too many open files
5 : file access denied
6 : invalid file handle
12 : invalid file access code
15 : invalid drive number
16 : cannot remove current directory
17 : cannot rename across
18 : no more files
100 : disk read error
101 : disk write error
102 : file not assigned
103 : file not open
104 : file not open for input
105 : file not open for output
150 : disk is write protected
151 : bad drive request structure length
152 : drive not ready
154 : CRC error in data
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
200 : div by zero
203 : heap overflow
204 : invalid pointer operation
205 : floating point overflow
206 : floating point underflow
207 : invalid floating point operation
208 : overlay manager not installed
209 : overlay file read error
210 : object not initialized
211 : call to abstract method
212 : stream registration error
213 : collection index out of range
214 : collection overflow error
216 : general protection fault
217 : invalid operation code
227 : assertion failed
300 : file IO error
301 : non-matched array bounds
302 : non-local procedure pointer
303 : procedure pointer out of scope
304 : function not implemented
305 : breakpoint error
306 : break by ctrl/c
307 : break by ctrl/break
308 : break by other process
309 : no floating point coprocessor
310 : invalid variant type operation