Ошибка 103 паскаль

Ошибка 103 при попытке чтения файла Lazarus Решение и ответ на вопрос 2003446

El petyx

0 / 0 / 0

Регистрация: 24.05.2017

Сообщений: 4

1

14.06.2017, 13:52. Показов 9276. Ответов 3

Метки нет (Все метки)


Здравствуйте. После попытки чтения выдается ошибка runerror 103. Что нужно исправить?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
procedure TForm1.Button3Click(Sender: TObject);
var
f:file;
s:file;
i,j,p:integer;
begin
Assignfile(f,'source.dat');
ReWrite(f,1);
for i:=1 to stringgrid1.RowCount do
 for j:=1 to stringgrid1.ColCount do
 begin
 p:=strtoint(stringgrid1.cells[j-1,i-1]);
 blockwrite(f,p,sizeof(p));
end;
CloseFile(f);
AssignFile(s,'size.dat');
ReWrite(s,1);
blockwrite(s,stringgrid1.RowCount,sizeof(stringgrid1.RowCount));
blockwrite(s,stringgrid1.ColCount,sizeof(stringgrid1.ColCount));
CloseFile(s);
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
f:file;
s:file;
i,j,p,y:integer;
si: array [1..2] of integer;
begin
AssignFile(s,'size.dat');
Reset(s,1);
for i:=1 to 2 do begin
    BlockRead(f,p,sizeof(p));
    si[i]:=p;
    end;
CloseFile(s);
StringGrid2.RowCount:=si[1];
StringGrid2.ColCount:=si[2];
 
AssignFile(f,'source.dat');
Reset(f,1);
 
{while not Eof(f) do
begin
   for i:=1 to StringGrid2.RowCount do
            for j:=1 to StringGrid2.ColCount do
                begin
                   BlockRead(f,p,sizeof(p));
                   StringGrid2.Cells[i-1,j-1]:=IntToStr(p);
                end;  
CloseFile(f);
end;
end;

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32456 / 20948 / 8107

Регистрация: 22.10.2011

Сообщений: 36,218

Записей в блоге: 7

14.06.2017, 14:41

2

Открываешь файл через переменную s (31-я строка), а читаешь через переменную f (33-я строка). Издержки копи-пасты?



0



El petyx

0 / 0 / 0

Регистрация: 24.05.2017

Сообщений: 4

15.06.2017, 07:39

 [ТС]

3

Не, издержки криворукости. Вот, подправил, но ошибка (103) таже появляется, а именно в строке 43

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
procedure TForm1.Button3Click(Sender: TObject);
var
f:file;
s:file;
i,j,p:integer;
begin
Assignfile(f,'source.dat');
ReWrite(f,1);
for i:=1 to stringgrid1.RowCount do
 for j:=1 to stringgrid1.ColCount do
 begin
 p:=strtoint(stringgrid1.cells[j-1,i-1]);
 blockwrite(f,p,sizeof(p));
end;
CloseFile(f);
AssignFile(s,'size.dat');
ReWrite(s,1);
blockwrite(s,stringgrid1.RowCount,sizeof(stringgrid1.RowCount));
blockwrite(s,stringgrid1.ColCount,sizeof(stringgrid1.ColCount));
CloseFile(s);
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
f:file;
s:file;
i,j,p,y:integer;
si: array [1..2] of integer;
begin
AssignFile(s,'size.dat');
Reset(s,1);
for i:=1 to 2 do begin
    BlockRead(s,p,sizeof(p));
    si[i]:=p;
    end;
CloseFile(s);
StringGrid2.RowCount:=si[1];
StringGrid2.ColCount:=si[2];
 
AssignFile(f,'source.dat');
Reset(f,1);
 
while not Eof(f) do
begin
   for i:=1 to StringGrid2.ColCount do
            for j:=1 to StringGrid2.RowCount do
                begin
                   BlockRead(f,p,sizeof(p));
                   StringGrid2.Cells[i-1,j-1]:=IntToStr(p);
                end;
CloseFile(f);
end;
end;



0



volvo

Супер-модератор

Эксперт Pascal/DelphiАвтор FAQ

32456 / 20948 / 8107

Регистрация: 22.10.2011

Сообщений: 36,218

Записей в блоге: 7

15.06.2017, 09:22

4

Лучший ответ Сообщение было отмечено volvo как решение

Решение

Цикл while не нужен, из файла и так прочитается столько значений, сколько туда было записано:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm1.Button4Click(Sender: TObject);
var
  f: file;
  s: file;
  i, j, p, y: integer;
  si: array [1..2] of integer;
begin
  AssignFile(s, 'size.dat');
  Reset(s, 1);
  for i := 1 to 2 do
  begin
    BlockRead(s, p, sizeof(p));
    si[i] := p;
  end;
  CloseFile(s);
  StringGrid2.RowCount := si[1];
  StringGrid2.ColCount := si[2];
 
  AssignFile(f, 'source.dat');
  Reset(f, 1);
 
  //while not EOF(f) do
  //begin
    for i := 1 to StringGrid2.ColCount do
      for j := 1 to StringGrid2.RowCount do
      begin
        BlockRead(f, p, sizeof(p));
        StringGrid2.Cells[i - 1, j - 1] := IntToStr(p);
      end;
    CloseFile(f);
  //end;
end;

P.S. Ты в курсе, что в StringGrid будет транспонированная относительно StringGrid1 матрица?



0



Модератор: Модераторы

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 и без опций. Если заработает, то компилируй снова и добавляй каждый раз по одной новой опции, так ты узнаешь, какая из них вызывает ошибку. Если не поможет, то пример кода вызвающий ошибку в студию :D

Сквозняк
энтузиаст
 
Сообщения: 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
энтузиаст
 
Сообщения: 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 напрямую, ты без пользы ломаешь кроссплатформенность своего скрипта — в каждой платформе этот компилятор называется по разному.

Сквозняк
энтузиаст
 
Сообщения: 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
энтузиаст
 
Сообщения: 1390
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград
  • Профиль
  • ICQ


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Pascal runtime error 103

Mavlyudov » 12.12.2011 03:20:21

После компилирования при запуске возникает ошибка:
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 и как ее устранить?

Re: Error 103

Сквозняк » 12.12.2011 04:48:52

Re: Error 103

Sergei I. Gorelkin » 12.12.2011 08:45:06

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;

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;

Источник

Pascal runtime error 103

Mavlyudov » 12.12.2011 03:20:21

После компилирования при запуске возникает ошибка:
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 и как ее устранить?

Re: Error 103

Сквозняк » 12.12.2011 04:48:52

Re: Error 103

Sergei I. Gorelkin » 12.12.2011 08:45:06

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;

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;

Источник

Pascal runtime error 103

Mavlyudov » 12.12.2011 03:20:21

После компилирования при запуске возникает ошибка:
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 и как ее устранить?

Re: Error 103

Сквозняк » 12.12.2011 04:48:52

Re: Error 103

Sergei I. Gorelkin » 12.12.2011 08:45:06

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;

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;

Источник

Pascal runtime error 103

Applications generated by Free Pascal might generate run-time errors when certain abnormal conditions are detected in the application. This appendix lists the possible run-time errors and gives information on why they might be produced. 1 Invalid function number An invalid operating system call was attempted. 2 File not found Reported when trying to erase, rename or open a non-existent file. 3 Path not found Reported by the directory handling routines when a path does not exist or is invalid. Also reported when trying to access a non-existent file. 4 Too many open files The maximum number of files currently opened by your process has been reached. Certain operating systems limit the number of files which can be opened concurrently, and this error can occur when this limit has been reached. 5 File access denied Permission to access the file is denied. This error might be caused by one of several reasons:

  • Trying to open for writing a file which is read-only, or which is actually a directory.
  • File is currently locked or used by another process.
  • Trying to create a new file, or directory while a file or directory of the same name already exists.
  • Trying to read from a file which was opened in write-only mode.
  • Trying to write from a file which was opened in read-only mode.
  • Trying to remove a directory or file while it is not possible.
  • No permission to access the file or directory.

6 Invalid file handle If this happens, the file variable you are using is trashed; it indicates that your memory is corrupted. 12 Invalid file access code Reported when a reset or rewrite is called with an invalid FileMode value. 15 Invalid drive number The number given to the Getdir or ChDir function specifies a non-existent disk. 16 Cannot remove current directory Reported when trying to remove the currently active directory. 17 Cannot rename across drives You cannot rename a file such that it would end up on another disk or partition. 100 Disk read error An error occurred when reading from disk. Typically happens when you try to read past the end of a file. 101 Disk write error Reported when the disk is full, and you’re trying to write to it. 102 File not assigned This is reported by Reset , Rewrite , Append , Rename and Erase , if you call them with an unassigned file as a parameter. 103 File not open Reported by the following functions : Close, Read, Write, Seek, EOf, FilePos, FileSize, Flush, BlockRead, and BlockWrite if the file is not open. 104 File not open for input Reported by Read, BlockRead, Eof, Eoln, SeekEof or SeekEoln if the file is not opened with Reset . 105 File not open for output Reported by write if a text file isn’t opened with Rewrite . 106 Invalid numeric format Reported when a non-numeric value is read from a text file, and a numeric value was expected. 107 Invalid enumeration Reported when a text representation of an enumerated constant cannot be created in a call to str or write(ln). 150 Disk is write-protected (Critical error) 151 Bad drive request struct length (Critical error) 152 Drive not ready (Critical error) 154 CRC error in data (Critical error) 156 Disk seek error (Critical error) 157 Unknown media type (Critical error) 158 Sector Not Found (Critical error) 159 Printer out of paper (Critical error) 160 Device write fault (Critical error) 161 Device read fault (Critical error) 162 Hardware failure (Critical error) 200 Division by zero The application attempted to divide a number by zero. 201 Range check error If you compiled your program with range checking on, then you can get this error in the following cases: 1. An array was accessed with an index outside its declared range. 2. Trying to assign a value to a variable outside its range (for instance an enumerated type). 202 Stack overflow error The stack has grown beyond its maximum size (in which case the size of local variables should be reduced to avoid this error), or the stack has become corrupt. This error is only reported when stack checking is enabled. 203 Heap overflow error The heap has grown beyond its boundaries. This is caused when trying to allocate memory explicitly with New , GetMem or ReallocMem , or when a class or object instance is created and no memory is left. Please note that, by default, Free Pascal provides a growing heap, i.e. the heap will try to allocate more memory if needed. However, if the heap has reached the maximum size allowed by the operating system or hardware, then you will get this error. 204 Invalid pointer operation You will get this in several cases:

  • if you call Dispose or Freemem with an invalid pointer
  • in case New or GetMem is called, and there is no more memory available. The behavior in this case depends on the setting of ReturnNilIfGrowHeapFails . If it is True , then Nil is returned. if False , then runerror 204 is raised.

205 Floating point overflow You are trying to use or produce real numbers that are too large. 206 Floating point underflow You are trying to use or produce real numbers that are too small. 207 Invalid floating point operation Can occur if you try to calculate the square root or logarithm of a negative number. 210 Object not initialized When compiled with range checking on, a program will report this error if you call a virtual method without having called its object’s constructor. 211 Call to abstract method Your program tried to execute an abstract virtual method. Abstract methods should be overridden, and the overriding method should be called. 212 Stream registration error This occurs when an invalid type is registered in the objects unit. 213 Collection index out of range You are trying to access a collection item with an invalid index ( objects unit). 214 Collection overflow error The collection has reached its maximal size, and you are trying to add another element ( objects unit). 215 Arithmetic overflow error This error is reported when the result of an arithmetic operation is outside of its supported range. Contrary to Turbo Pascal, this error is only reported for 32-bit or 64-bit arithmetic overflows. This is due to the fact that everything is converted to 32-bit or 64-bit before doing the actual arithmetic operation. 216 General Protection fault The application tried to access invalid memory space. This can be caused by several problems: 1. Dereferencing a nil pointer. 2. Trying to access memory which is out of bounds (for example, calling move with an invalid length). 217 Unhandled exception occurred An exception occurred, and there was no exception handler present. The sysutils unit installs a default exception handler which catches all exceptions and exits gracefully. 218 Invalid value specified Error 218 occurs when an invalid value was specified to a system call, for instance when specifying a negative value to a seek() call. 219 Invalid typecast

Thrown when an invalid typecast is attempted on a class using the as operator. This error is also thrown when an object or class is typecast to an invalid class or object and a virtual method of that class or object is called. This last error is only detected if the -CR compiler option is used. 222 Variant dispatch error No dispatch method to call from variant. 223 Variant array create The variant array creation failed. Usually when there is not enough memory. 224 Variant is not an array This error occurs when a variant array operation is attempted on a variant which is not an array. 225 Var Array Bounds check error This error occurs when a variant array index is out of bounds. 227 Assertion failed error An assertion failed, and no AssertErrorProc procedural variable was installed. 229 Safecall error check This error occurs is a safecall check fails, and no handler routine is available. 231 Exception stack corrupted This error occurs when the exception object is retrieved and none is available. 232 Threads not supported Thread management relies on a separate driver on some operating systems (notably, Unixes). The unit with this driver needs to be specified on the uses clause of the program, preferably as the first unit ( cthreads on unix).

Источник

>
Exit code=103
, Где ошибка?

  • Подписаться на тему
  • Сообщить другу
  • Скачать/распечатать тему



Сообщ.
#1

,
17.10.09, 17:07

    Senior Member

    ****

    Рейтинг (т): 13

    ExpandedWrap disabled

      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. Что не так в программе?

    Нашел текст ошибки:
    103 File not open Reported by the following functions : Close, Read, Write, Seek, EOf,
    FilePos, FileSize, Flush, BlockRead, and BlockWrite if the file is not open.

    Но не могу понять где и почему происходит ошибка.

    ОС: Windows XP
    IDE: FPC 2.2.2

    Guru

    volvo877



    Сообщ.
    #2

    ,
    17.10.09, 17:10

      Moderator

      *******

      Рейтинг (т): 878

      Цитата Polinom2686 @ 17.10.09, 17:07

      Но не могу понять где и почему происходит ошибка.

      Файл с введенным_именем.TXT в текущей папке присутствует? Тогда присоедини его тоже сюда (в архиве, чтоб можно было посмотреть, где именно у тебя вылетает программа). У меня с пустым файлом она просто зависает, а не вылетает.


      Polinom2686



      Сообщ.
      #3

      ,
      17.10.09, 17:30

        Senior Member

        ****

        Рейтинг (т): 13

        Программа должна разобрать этот файл.

        Добавлено 17.10.09, 17:33
        Вообще задача такая: в файле находится список альянса, который содержит ник игрока и название его городов и координат островов. Надо разобрать этот файл, т.е. вытащить из него ники игроков и координаты островов для каждого игрока, и сохранить данные в типизированный файл.

        Прикреплённый файлПрикреплённый файл1.zip (15.65 Кбайт, скачиваний: 183)


        Polinom2686



        Сообщ.
        #4

        ,
        17.10.09, 17:45

          Senior Member

          ****

          Рейтинг (т): 13

          Guru

          volvo877



          Сообщ.
          #5

          ,
          17.10.09, 17:46

            Moderator

            *******

            Рейтинг (т): 878

            Ошибка здесь:

            ExpandedWrap disabled

              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



            Сообщ.
            #6

            ,
            17.10.09, 17:49

              Senior Member

              ****

              Рейтинг (т): 13

              Спасибо, я сейчас посмотрю у себя в алгоритме.

              Добавлено 17.10.09, 17:54
              Да, действительно Not лишний.
              Спасибо. +1

              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

              0 пользователей:

              • Предыдущая тема
              • 32-битные компиляторы
              • Следующая тема

              [ Script execution time: 0,0312 ]   [ 16 queries used ]   [ Generated: 11.02.23, 20:35 GMT ]  

              Приложения написанные на 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 (Ошибка проверки границ)

              Если вы компилировали прогамму с включённой провереой границ, Вы можете получить эту ошибку в следующих случаях:

              1. Массив был вызван с индексом, выходящим за декларированые пределы.

              2. Попытка присвоить значение переменной, выходящее за декларированые границы (для 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 Ошибка защиты памяти)

              Приложение попыталось обратиться к недопустимому участку памяти. Это может быть вызвано следующими причинами:

              1. Попытка получить разуказатель для nil.

              2. Попытка получить доступ к выходящему за допустимые границы участку памяти (например, вызов move с неправильной длиной).


              217 Unhandled exception occurred (Произошо неизвестное исключение)

              Произошло исключение, и для него не существеет хэндла. Модуль sysutils устанавливает handler(менеджер), который отлавливает все исключения, и безопасно выходит в случае обнаружения оного.


              219 Invalid typecast (Неправильное приведение типов)

              Генерируется когда недопустимое приведение типов производится над классом используя оператор as. Эта ошибка также генерируется, когда объект или класс приводится к недопустимому объекту или классу, и виртуальный метод этого объекта или класса вызывается. Эта последняя ошибка детектируется только с использованием опции -CR компилятора.


              227 Assertion failed error (Сбой утверждения)

              Утверждение провалено, и процедурная переменная AssertErrorProc не была уcтановлена.


              IPB

              > ВНИМАНИЕ!

              > Ошибка при открытии файла I/O error 103

              сообщение 6.10.2009 0:45

              Сообщение
              #1

              Пионер
              **

              Группа: Пользователи
              Сообщений: 103
              Пол: Мужской
              Реальное имя: Александр

              Репутация: -  0  +



              Здравствуйте, столкнулся с такой проблемой при открытии типизированного файла все происходит нормально, но когда нажимаю кнопку отмена вместо открыть появляется ошибка I/O error 103


              procedure TForm1.N5Click(Sender: TObject); // Open file
              type
              zapic=record
              tablica:string[1];
              fynkci9:string[200];
              kolvo_strok:integer;
              kolvo_el:integer;
              end;
              var
              j:integer;
              ft:file of zapic;
              s:zapic;
              m:string;
              begin
              OpenDialog1.Title:='Открыть файл';
              openDialog1.Filter :='Файлы таблицы истинности|*.tabl';
              if OpenDialog1.Execute then
              begin
              fname:=OpenDialog1.FileName;
              AssignFile(ft,fname);
              Reset(ft);
              end
              else ShowMessage('Открытие файла остановлено');
              j:=0;
              read(ft,s);
              stringgrid2.RowCount:=s.kolvo_strok;
              while not eof(ft) do
              begin
              read(ft,s);
              stringgrid2.Cells[0,j]:=s.tablica;
              inc(j);
              end;
              edit1.Text:=inttostr(s.kolvo_el);
              edit2.Text:=s.fynkci9;
              closeFile(ft);
              end;

              Пытался посмотреть по шагам ставлю указатель на начало процедуры, дойдя до строки


              if OpenDialog1.Execute then

              указатель почему-то перепрыгивает совсем на другую процедуру


              procedure TForm1.Timer1Timer(Sender: TObject);
              begin
              StringGrid2.TopRow := StringGrid1.TopRow;
              end;

               Оффлайн  Профиль  PM 

               К началу страницы 

              + Ответить 

              ninja

              сообщение 6.10.2009 1:06

              Сообщение
              #2

              Пионер
              **

              Группа: Пользователи
              Сообщений: 103
              Пол: Мужской
              Реальное имя: Александр

              Репутация: -  0  +



              Извиняюсь за созданную тему решение было найденно добавлением оператора exit


              .....
              else begin ShowMessage('Открытие файла остановлено'); exit; end;
              ....

               Оффлайн  Профиль  PM 

               К началу страницы 

              + Ответить 

              volvo

              сообщение 6.10.2009 1:14

              Сообщение
              #3

              Гость



              Цитата

              решение было найденно добавлением оператора exit

              А зачем тебе лишний Exit, когда и без него прекрасно все можно сделать? Ты зачем разбил последовательность операторов на 2 части? Вот так что, кто-то тебе запретил делать:

              begin
              OpenDialog1.Title:='Открыть файл';
              openDialog1.Filter :='Файлы таблицы истинности|*.tabl';
              if OpenDialog1.Execute then
              begin
              fname:=OpenDialog1.FileName;
              AssignFile(ft,fname);
              Reset(ft);

              j:=0;
              read(ft,s);
              stringgrid2.RowCount:=s.kolvo_strok;
              while not eof(ft) do
              begin
              read(ft,s);
              stringgrid2.Cells[0,j]:=s.tablica;
              inc(j);
              end;
              edit1.Text:=inttostr(s.kolvo_el);
              edit2.Text:=s.fynkci9;
              closeFile(ft);
              end
              else ShowMessage('Открытие файла остановлено');
              end;

              ? Никаких Exit-ов, заметь… И код читается лучше… Кстати, ошибки при чтении тоже надо бы обрабатывать, нельзя быть уверенным на 100%, что их не будет…

               К началу страницы 

              + Ответить 

              ninja

              сообщение 6.10.2009 1:24

              Сообщение
              #4

              Пионер
              **

              Группа: Пользователи
              Сообщений: 103
              Пол: Мужской
              Реальное имя: Александр

              Репутация: -  0  +



              мммм….. Спасибо, действительно так гораздо лучше и понятней

               Оффлайн  Профиль  PM 

               К началу страницы 

              + Ответить 

              where can i buy stromectol in th

              сообщение 31.08.2021 23:14

              Сообщение
              #5

              Гость



              China Syntroid

               К началу страницы 

              + Ответить 

              nishaknapp

              сообщение 16.01.2023 6:54

              Сообщение
              #6

              Бывалый
              ***

              Группа: Пользователи
              Сообщений: 155
              Пол: Мужской

              Репутация: -  0  +



              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

               Оффлайн  Профиль  PM 

               К началу страницы 

              + Ответить 

              1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)

              Пользователей: 0

              500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают

              Связь с администрацией: bu_gen в домене octagram.name

              Понравилась статья? Поделить с друзьями:
            • Ошибка 103 на котле аристон cares x
            • Ошибка 103 калина
            • Ошибка 103 дейз
            • Ошибка 103 ваз 2110
            • Ошибка 102f00 на мерседес