Ошибка 201 паскаль фри

I have tried to make a simple snake game with Free Pascal, when I started the programme, it drew the map exactly what I want but after that, I pressed the button that I have set to control the snake and it exited with exit code 201.

I don’t know much about that exit code, could you explain me the problems of the programme? This is the longest program I have ever made with Pascal.

Here is the code:

    uses crt;

    type 
      ran=record
        x:byte;
        y:byte;
      end;

    var 
      f:ran;
      s:array[1..1000] of ran;
      i,j:longint;
      st,l:byte;

    function getkey:integer;
    var 
      k:integer;
    begin
      k:=ord(readkey);
      if k=0 then k:=-ord(readkey);
      getkey:=k;
    end;

    procedure fa;
    begin
      randomize;
      f.x:=random(98)+1;
      f.y:=random(23)+1;
      gotoxy(f.x,f.y);
      writeln('o');
    end;

    procedure draw;
    begin
      gotoxy(1,1);
      st:=1;
      for i:=1 to 25 do begin
        for j:=1 to 100 do write('X');
        writeln
      end;
      gotoxy(st+1,st+1);
      for i:=1 to 23 do begin
        for j:=1 to 98 do write(' ');
        gotoxy(st+1,i+2);
      end;
    end;

    procedure sts;
    begin
      s[1].x:=19;
      s[1].y:=6;
      gotoxy(s[1].x,s[1].y);
      writeln('@');
    end;

    procedure fa1;
    begin
      f.x:=29;
      f.y:=5;
      gotoxy(f.x,f.y);
      writeln('o');
    end;

    procedure eat;
    begin
      if (s[1].x=f.x) and (s[1].y=f.y) then begin
        l:=l+1;
        fa;
      end;
    end;

    function die:boolean;
    begin
      die:=false;
      if (s[1].x=1) or (s[1].x=100) or (s[1].y=1) or (s[1].y=25) then 
        die:=true;
      if l>=5 then
        for i:=5 to l do
          if (s[1].x=s[i].x) and (s[1].y=s[i].y) then 
            die:=true;
    end;

    procedure up;
    begin
      for i:=l downto 2 do begin
        s[i].y:=s[i-1].y;
        gotoxy(s[i].x,s[i].y);
        writeln('+');
      end;
      gotoxy(s[l].x,s[l].y+1);
      writeln(' ');
      s[1].y:=s[1].y-1;
      gotoxy(s[1].x,s[1].y);
      writeln('@');
    end;

    procedure down;
    begin
      for i:=l downto 2 do begin
        s[i].y:=s[i-1].y;
        gotoxy(s[i].x,s[i].y);
        writeln('+');
      end;
      gotoxy(s[l].x,s[l].y-1);
      writeln(' ');
      s[1].y:=s[1].y+1;
      gotoxy(s[1].x,s[1].y);
      writeln('@');
    end;

    procedure left;
    begin
      for i:=l downto 2 do begin
        s[i].x:=s[i-1].x;
        gotoxy(s[i].x,s[i].y);
        writeln('+');
      end;
      gotoxy(s[l].x+1,s[l].y);
      writeln(' ');
      s[1].x:=s[1].x-1;
      gotoxy(s[1].x,s[1].y);
      writeln('@');
    end;

    procedure right;
    begin
      for i:=l downto 2 do begin
        s[i].x:=s[i-1].x;
        gotoxy(s[i].x,s[i].y);
        writeln('+');
      end;
      gotoxy(s[l].x-1,s[l].y);
      writeln(' ');
      s[1].x:=s[1].x+1;
      gotoxy(s[1].x,s[1].y);
      writeln('@');
    end;

    procedure auto(k:integer);
    begin
      case k of
        -72:up;
        -80:down;
        -75:left;
        -77:right;
        119:up;
        115:down;
        97:left;
        100:right;
      end;
    end;

    procedure ingame(t:integer);
    var 
      d,e:boolean;
    begin
      repeat
        auto(t);
        d:=die;
        if d=true then exit;
        eat;
      until (keypressed);
      if keypressed then t:=getkey;
      case t of
        -72:up;
        -80:down;
        -75:left;
        -77:right;
        119:up;
        115:down;
         97:left;
        100:right;
      end;
      eat;
      d:=die;
      if d=true then exit;
    end;

    procedure first;
    var
      k:integer;
    begin
      draw;
      fa1;
      sts;
      if keypressed then k:=getkey;
      ingame(k);
    end;

    BEGIN
      clrscr;
      first;
      readln
    END.

Maxizar писал(а):1- Используйте Lazarus.

Если уметь патчить паскалевское иде, то для многих целей оно не хуже.

2- Забудьте про атавизмы (Goto, Uses Graph, Crt). Не ну правда это даже смешно:

Лучше несколько Goto чем один указатель — структуру программы не разрушает, багов сверх меры не создаёт. Инициализация Crt весит намного меньше Sysutils, а для хелловорда от них требуется лишь Delay или Sleep. Sysutils лишь не устраивает некритичного бага при Writeln(‘русский текст в Utf8 кодировке’); Другие преимущества нужно искать с микроскопом. Sdl работает намного стабильнее Graph и в линуксе и в виндовсе, но не имеет процедур типа Line, Cirkle — того что нужно для построения графиков.

4- Я переписал программу, и она полностью работает, так в чем проблема?

Ага, работает, скомпиленная лично вами, под вайном. Лазарус 0.9.28.2 beta под линуксом не желает её компилить — отсутствует модуль Graph. Имхо, только по этой причине прогамму ещё не разложили по полочкам.

из-за чего приходится проходить весь код… у вас код 100 строк.. и пару циклов….. Дебаггер в руки и вперед.

Какой тут ещё дебаггер? При условии компиляции и запуска, здесь и без него просто ищется. Воткнуть

Код: Выделить всё
A:=A div(A-A);

скомпилировать, запустить, посмотреть вывод, перенести вставку в другое место, скомпилить… И так до обнаружения проблемного оператора.

А автору программы можно посоветовать пореже использовать integer если нет уверенности насчёт ошибки переполнения — int64 наше всё.

Добавлено спустя 1 час 13 минут 11 секунд:
Да, вспомнил, при низкоуровневом рисовании нужно проверять координаты рисуемых точек на диапазон. Если рисовать за пределами окна, то может случиться страшное — что-то типа ошибки 201.

1296 / 469 / 151

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

Сообщений: 2,249

1

21.03.2015, 18:48. Показов 6301. Ответов 23


Студворк — интернет-сервис помощи студентам

Задание:
1. Разработать процедуры сортировки массива целых чисел методом прямого выбора, методом пузырьковой сортировки и методом шейкерной сортировки (язык программирования Паскаль или Си).
2. Правильность сортировки проверить путем подсчета контрольной суммы и числа серий в массиве.
3. Во время сортировки предусмотреть подсчет количества пересылок и сравнений (М и С), сравнить их с теоретическими оценками.
4. Составить таблицу следующего вида (данные получить экспериментально) для n= 100, 200, 300, 400, 500. (n – количество элементов в массиве)

Я для каждого размера заполняю массив по возрастанию, по убыванию и случайным образом, и замеряю количество пересылок и сравнений для каждого случая. Пока что только метод Прямого выбора проверяю.
При n = 100 все ок. При n = 200 с массивом по возрастанию все ок, по убыванию все ок, а на случайно заполненном массиве вылетает runtime error 201 при попытке обращения к любому элементу (поставила вывод a[0] перед началом, и вывод текущего i на каждой итерации чтобы знать когда оно вылетает, ну и вылетает соответственно при попытке обращения к a[0] перед началом сортировки). Не понимаю в чем вообще может быть дело. Помогите пожалуйста.



0



Модератор

Эксперт по электронике

8324 / 4223 / 1602

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

Сообщений: 13,154

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

21.03.2015, 19:45

2

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

Решение

У меня не сразу воспроизвелась ошибка. И я решил, что это связано с режимами компиляции.
После пошагового тестирования увидел — ошибка при выполнении count_sum. После пошагового выполнения и контроля переменных sum, i стало видно, что при переполнении sum (более ~32000) получается ошибка 201.

Вывод: для суммирования использовать более ёмкий тип.



1



1296 / 469 / 151

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

Сообщений: 2,249

21.03.2015, 19:49

 [ТС]

3

ФедосеевПавел, тогда почему у меня вылетает в сортировке, а не в счете? и не может именно взять a[0] почему-то, хотя a[0] явно существует и уже использовался
Хотя это конечно тоже надо поменять, спасибо



0



1296 / 469 / 151

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

Сообщений: 2,249

21.03.2015, 19:59

 [ТС]

4

Поменяла на int64 там. Вроде бы больше нигде увеличивать настолько не надо. Теперь вылетает на первой сортировке при n = 300.



0



1296 / 469 / 151

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

Сообщений: 2,249

21.03.2015, 20:00

 [ТС]

5

Ушла часа на полтора, если что



0



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

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

32593 / 21062 / 8134

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

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

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

21.03.2015, 20:09

6

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

Решение

Керра, гонял во всех режимах совместимости, вылета при mode delphi и при mode objfpc нет совсем, при mode tp / mode fpc вылетает с 201-ой ошибкой в count_sum, при mode macpas вылет там же, в count_sum, но уже с 217-ой ошибкой. Так что во-первых, озвучь режим, в котором работаешь, а во-вторых — исправить тип sum на более емкий таки придется.

P.S. Со внесенными исправлениями по 30 запусков программы (в каждом режиме) прошло без сбоя.



1



Модератор

Эксперт по электронике

8324 / 4223 / 1602

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

Сообщений: 13,154

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

21.03.2015, 20:13

7

После замены типа old_sum, count_sum и sum на int64, прогнал по всем режимам ObjFPC, Delphi и пр. Ошибка не возникала.
Я в растерянности.
————
PS Sorry. Долго набирал. Получилось повторение поста volvo.



0



1296 / 469 / 151

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

Сообщений: 2,249

21.03.2015, 20:17

 [ТС]

8

ФедосеевПавел, тоже только что сделала ту же замену — все еще вылетает при первой сортировке с n = 300
volvo, режим… free pascal 2.6, без модов, в опциях mode debug… чувствую себя совсем студентом…



0



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

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

32593 / 21062 / 8134

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

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

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

21.03.2015, 20:19

9

Керра, не то. Интересно, что выбрано в Options->Compiler->Compiler mode



0



1296 / 469 / 151

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

Сообщений: 2,249

21.03.2015, 20:20

 [ТС]

10

volvo, free pascal dialect



0



Модератор

Эксперт по электронике

8324 / 4223 / 1602

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

Сообщений: 13,154

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

21.03.2015, 20:33

11

Sorry за шаманство. А если в каталоге с исходниками удалить все лишние файлы, а потом заново перекомпилировать?



0



1296 / 469 / 151

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

Сообщений: 2,249

21.03.2015, 21:34

 [ТС]

12

Ничего не изменилось

Добавлено через 56 минут
Елки зеленые. Забыла в count_sum поменять тип переменной… Тип функции поменяла, а переменную забыла…

Добавлено через 1 минуту
Мда, невнимательность это определенно мой конек…



0



Модератор

Эксперт по электронике

8324 / 4223 / 1602

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

Сообщений: 13,154

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

21.03.2015, 21:35

13

(робко) Ура?
Ур-ра!!!



1



1296 / 469 / 151

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

Сообщений: 2,249

21.03.2015, 21:37

 [ТС]

14

.



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7534 / 4394 / 2785

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

Сообщений: 12,588

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

22.03.2015, 00:16

15

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

Решение

Керра,
1) обратите внимание на использование в циклах to вместо downto, есть ошибки, когда перебор от большего к меньшему;
2) посмотрите, вероятно предложенный ниже вариант декомпозиции окажется более удачным:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
type
  TElement=Integer;
 
var
  cntComp, cntSwap: Longint;
 
procedure Swap(var a, b: TElement);
var c: TElement;
begin
  c:=a; a:=b; b:=c;
  Inc(cntSwap);
end;
 
function IsLess(a, b: TElement): Boolean;
begin
  IsLess:=a<b;
  Inc(cntComp);
end;

Тогда код сортировок сохранится незагроможденным (обратите внимание на downto):

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
procedure sort_dsel(var a: array of TElement);
var
  i, j, m: integer;
begin
  for i := 0 to high(a)-1 do begin
    m := i;
    for j := i+1 to high(a) do
      if IsLess(a[j], a[m]) then min := j;
    if m<>i then Swap(a[i], a[m]);
  end;
end;
 
procedure sort_bubl(var a: array of TElement);
var
  i, j: integer;
begin
  for i := high(a)-1 downto 1 do
    for j := 0 to i do
      if IsLess(a[j+1], a[j]) then Swap(a[j], a[j+1]);
end;
 
procedure sort_ctail(var a: array of TElement);
var
  l, r, i: Integer;
begin
  l := 0; r := High(a);
  repeat
    Inc(l);
    for i := r downto l do
      if IsLess(a[i], a[i-1]) then Swap(a[i], a[i-1]);
    Dec(r);
    for i := l to r do
      if IsLess(a[i+1], a[i]) then Swap(a[i+1], a[i]);
  until l>r;
end;

3) В таком варианте и код сбора статистики можно легко унифицировать:

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
type
  TSortProc=procedure (var a: array of TElement);
 
procedure MakeStat;
const
  Sort=array [1..3] of TSortProc = (sort_dsel, sort_bubl, sort_ctail);
  sSort=array [1..3] of String[5] = ('DSEL', 'BUBL', 'CTAIL');
  Fill=array [1..3] of TSortProc = (FillAsc, FillDsc, FillRnd);
  sFill=array [1..3] of String[3] = ('ASC', 'DSC', 'RND');
var
  a: array of TElement;
  i, j, k: Integer;
  s: LongInt;
begin
  for i:=1 to 5 do begin
    SetLength(a, i*100);
    for j:=1 to 3 do 
      for k:=1 to 3 do begin
        Fill[j](a); s:=CountSum(a);
        cntComp:=0; cntSwap:=0; Sort[k](a);
        WriteLn(sSort[k]:6, i*100:4, sFill[j]:8, cntComp:8, cntSwap:8,
          CountAsc(a)=i*100:8, s=CountSum(a):8);
      end;
  end;
  a:=nil;
end;



2



1296 / 469 / 151

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

Сообщений: 2,249

22.03.2015, 07:50

 [ТС]

16

bormant, спасибо



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7534 / 4394 / 2785

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

Сообщений: 12,588

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

22.03.2015, 09:20

17

Если для сравнения алгоритмов захочется получить одни и те же псевдослучайный массивы, это несложно, достаточно обеспечить одинаковое начальное значение ГПСЧ:

Pascal
1
2
3
4
5
6
7
var seed: Cardinal;
...
  Randomize; seed:=RandSeed;
...
  for k:=1 to 3 do begin
    RandSeed:=seed; FillRnd(a);  { одинаковое заполнение для k=1..3 }
    cntComp:=0; cntSwap:=0; Sort[k](a);

Добавлено через 2 минуты
И убрать вызов Randomize из FillRnd().



1



1296 / 469 / 151

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

Сообщений: 2,249

22.03.2015, 09:21

 [ТС]

18

Естественно
Спасибо



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7534 / 4394 / 2785

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

Сообщений: 12,588

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

22.03.2015, 10:00

19

По поводу суммы элементов. Поскольку используется она как контрольная сумма без учета порядка, программист вправе принять решение о допустимости переполнений при ее подсчете. В FPC за целочисленный переполнения отвечает $R, в TP — $Q, обе локальные (в Delphi на уровне процедуры, в TP/FPC на уровне выражения). В FPC Inc/Dec контролируются на переполнение, в TP — нет. Поэтому возможен такой вариант для подавления ошибки переполнения при подсчете контрольной суммы:

Pascal
1
2
3
4
5
6
7
8
9
{$UNDEF RON}{$IFOPT R+}{$DEFINE RON}{$R-}{$ENDIF}
{$UNDEF QON}{$IFOPT Q+}{$DEFINE QON}{$Q-}{$ENDIF}
function CSum(const a: array of TElement): TElement;
var e: TElement;
begin
  Result:=0; for e in a do Result:=Result+e;
end;
{$IFDEF RON}{$R+}{$ENDIF}
{$IFDEF QON}{$Q+}{$ENDIF}

пляска с условной компиляцией для восстановления лолкальных опций компиляции на последующий код.

Добавлено через 8 минут
или

Pascal
1
2
3
{$PUSH}{$Q-,R-}
...
{$POP}



1



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

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

32593 / 21062 / 8134

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

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

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

22.03.2015, 11:41

20

{$OFFTOP ON}
Вот почему, интересно, FPC не позволяет перегрузить оператор «<» для встроенного типа? Насколько все было бы проще, не надо вводить функцию IsLess, код остается неприкосновенным, только подсчет количества сравнений выполняется в перегруженном операторе… Странно.
{$OFFTOP OFF}



0



Maxizar писал(а):1- Используйте Lazarus.

Если уметь патчить паскалевское иде, то для многих целей оно не хуже.

2- Забудьте про атавизмы (Goto, Uses Graph, Crt). Не ну правда это даже смешно:

Лучше несколько Goto чем один указатель — структуру программы не разрушает, багов сверх меры не создаёт. Инициализация Crt весит намного меньше Sysutils, а для хелловорда от них требуется лишь Delay или Sleep. Sysutils лишь не устраивает некритичного бага при Writeln(‘русский текст в Utf8 кодировке’); Другие преимущества нужно искать с микроскопом. Sdl работает намного стабильнее Graph и в линуксе и в виндовсе, но не имеет процедур типа Line, Cirkle — того что нужно для построения графиков.

4- Я переписал программу, и она полностью работает, так в чем проблема?

Ага, работает, скомпиленная лично вами, под вайном. Лазарус 0.9.28.2 beta под линуксом не желает её компилить — отсутствует модуль Graph. Имхо, только по этой причине прогамму ещё не разложили по полочкам.

из-за чего приходится проходить весь код… у вас код 100 строк.. и пару циклов….. Дебаггер в руки и вперед.

Какой тут ещё дебаггер? При условии компиляции и запуска, здесь и без него просто ищется. Воткнуть

Код: Выделить всё
A:=A div(A-A);

скомпилировать, запустить, посмотреть вывод, перенести вставку в другое место, скомпилить… И так до обнаружения проблемного оператора.

А автору программы можно посоветовать пореже использовать integer если нет уверенности насчёт ошибки переполнения — int64 наше всё.

Добавлено спустя 1 час 13 минут 11 секунд:
Да, вспомнил, при низкоуровневом рисовании нужно проверять координаты рисуемых точек на диапазон. Если рисовать за пределами окна, то может случиться страшное — что-то типа ошибки 201.

Приложения написанные на 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тановлена.


Click here follow the steps to fix Pascal Error 201 and related errors.

Instructions

 

To Fix (Pascal Error 201) error you need to
follow the steps below:

Step 1:

 
Download
(Pascal Error 201) Repair Tool
   

Step 2:

 
Click the «Scan» button
   

Step 3:

 
Click ‘Fix All‘ and you’re done!
 

Compatibility:
Windows 7, 8, Vista, XP
Download Size: 6MB
Requirements: 300 MHz Processor, 256 MB Ram, 22 MB HDD

Limitations:
This download is a free evaluation version. To unlock all features and tools, a purchase is required.

Pascal Error 201 Error Codes are caused in one way or another by misconfigured system files
in your windows operating system.

If you have Pascal Error 201 errors then we strongly recommend that you

Download (Pascal Error 201) Repair Tool.

This article contains information that shows you how to fix
Pascal Error 201
both
(manually) and (automatically) , In addition, this article will help you troubleshoot some common error messages related to Pascal Error 201 error code that you may receive.

Note:
This article was updated on 2023-02-03 and previously published under WIKI_Q210794

Contents

  •   1. What is Pascal Error 201 error?
  •   2. What causes Pascal Error 201 error?
  •   3. How to easily fix Pascal Error 201 errors

The Pascal Error 201 error is the Hexadecimal format of the error caused. This is common error code format used by windows and other windows compatible software and driver vendors.

This code is used by the vendor to identify the error caused. This Pascal Error 201 error code has a numeric error number and a technical description. In some cases the error may have more parameters in Pascal Error 201 format .This additional hexadecimal code are the address of the memory locations where the instruction(s) was loaded at the time of the error.

What causes Pascal Error 201 error?

The Pascal Error 201 error may be caused by windows system files damage. The corrupted system files entries can be a real threat to the well being of your computer.

There can be many events which may have resulted in the system files errors. An incomplete installation, an incomplete uninstall, improper deletion of applications or hardware. It can also be caused if your computer is recovered from a virus or adware/spyware
attack or by an improper shutdown of the computer. All the above actives
may result in the deletion or corruption of the entries in the windows
system files. This corrupted system file will lead to the missing and wrongly
linked information and files needed for the proper working of the
application.

How to easily fix Pascal Error 201 error?

There are two (2) ways to fix Pascal Error 201 Error:

Advanced Computer User Solution (manual update):

1) Start your computer and log on as an administrator.

2) Click the Start button then select All Programs, Accessories, System Tools, and then click System Restore.

3) In the new window, select «Restore my computer to an earlier time» option and then click Next.

4) Select the most recent system restore point from the «On this list, click a restore point» list, and then click Next.

5) Click Next on the confirmation window.

6) Restarts the computer when the restoration is finished.

Novice Computer User Solution (completely automated):

1) Download (Pascal Error 201) repair utility.

2) Install program and click Scan button.

3) Click the Fix Errors button when scan is completed.

4) Restart your computer.

How does it work?

This tool will scan and diagnose, then repairs, your PC with patent
pending technology that fix your windows operating system registry
structure.
basic features: (repairs system freezing and rebooting issues , start-up customization , browser helper object management , program removal management , live updates , windows structure repair.)

I am making a program in pascal in which I am asked to read from a file then put the names in alphabetical order. This is the code i have so far.

for counter := 1 to 6 do
    begin 
        readln(infile, name[counter]);
            if names[counter] > names[counter+1] then
                high:=names[counter];
            if  names[counter] < names[counter-1] then
                low:=names[counter];
    end;

    for counter:= 1 to 6 do
        begin
            writeln(names[counter]);
        end;
close(infile);
readln()
end. 

Casey's user avatar

Casey

3,2971 gold badge26 silver badges41 bronze badges

asked May 19, 2014 at 19:29

EJR's user avatar

3

  • Ошибка 201 ошибка проверки диапазона
  • Ошибка 201 нет файла din соответствующего информационному банку prss
  • Ошибка 201 на телевизоре ютуб
  • Ошибка 201 на телевизоре тсл
  • Ошибка 201 на телевизоре tcl