Модератор: Модераторы
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 и без опций. Если заработает, то компилируй снова и добавляй каждый раз по одной новой опции, так ты узнаешь, какая из них вызывает ошибку. Если не поможет, то пример кода вызвающий ошибку в студию ![]()
- Сквозняк
- энтузиаст
- Сообщения: 1006
- Зарегистрирован: 29.06.2006 22:08:32
Re: Error 103
Sergei I. Gorelkin » 12.12.2011 08:45:06
Скорее всего не хватает ключа -Wg или директивы {$apptype console} в начале программы.
-

Sergei I. Gorelkin - энтузиаст
- Сообщения: 1389
- Зарегистрирован: 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 напрямую, ты без пользы ломаешь кроссплатформенность своего скрипта — в каждой платформе этот компилятор называется по разному.
- Сквозняк
- энтузиаст
- Сообщения: 1006
- Зарегистрирован: 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 - энтузиаст
- Сообщения: 1389
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
-
- Профиль
- ICQ
Вернуться в Free Pascal Compiler
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

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,0248 ] [ 16 queries used ] [ Generated: 28.01.23, 20:20 GMT ]

ВНИМАНИЕ!
|
|
|
Сообщение |
|
|
Пионер
Группа: Пользователи
Репутация: |
Здравствуйте, столкнулся с такой проблемой при открытии типизированного файла все происходит нормально, но когда нажимаю кнопку отмена вместо открыть появляется ошибка I/O error 103
Пытался посмотреть по шагам ставлю указатель на начало процедуры, дойдя до строки
указатель почему-то перепрыгивает совсем на другую процедуру
|
|
|
|
| ninja |
Сообщение |
|
Пионер
Группа: Пользователи
Репутация: |
Извиняюсь за созданную тему решение было найденно добавлением оператора exit
|
|
|
|
| volvo |
Сообщение |
|
Гость |
Цитата решение было найденно добавлением оператора exit А зачем тебе лишний Exit, когда и без него прекрасно все можно сделать? Ты зачем разбил последовательность операторов на 2 части? Вот так что, кто-то тебе запретил делать: begin ? Никаких Exit-ов, заметь… И код читается лучше… Кстати, ошибки при чтении тоже надо бы обрабатывать, нельзя быть уверенным на 100%, что их не будет… |
|
|
|
| ninja |
Сообщение |
|
Пионер
Группа: Пользователи
Репутация: |
мммм….. Спасибо, действительно так гораздо лучше и понятней |
|
|
|
| where can i buy stromectol in th |
Сообщение |
|
Гость |
China Syntroid |
|
|
|
| nishaknapp |
Сообщение |
|
Бывалый
Группа: Пользователи
Репутация: |
Why not settling on games that is fun and at the same time your earning. Well it’ll make suspense because the game is well but dude just try it and it gave me hope while pandemic is real rn. BEST BONUSES IN CASINO |
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
Связь с администрацией: bu_gen в домене octagram.name




1.zip (15.65 Кбайт, скачиваний: 183)
6.10.2009 0:45
0 




