Меню

Free pascal ошибка 103

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

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
энтузиаст
 
Сообщения: 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
, Где ошибка?

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



Сообщ.
#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,0248 ]   [ 16 queries used ]   [ Generated: 28.01.23, 20:20 GMT ]  

              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

              0 0 голоса
              Рейтинг статьи
              Подписаться
              Уведомить о
              guest

              0 комментариев
              Старые
              Новые Популярные
              Межтекстовые Отзывы
              Посмотреть все комментарии

              А вот еще интересные материалы:

            • Яшка сломя голову остановился исправьте ошибки
            • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
            • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
            • Free fire ошибка файл поврежден
            • Free extended task manager ошибка 9