Меню

Stack overflow ошибка паскаль

Stack overflow error pascal

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).

Источник

Stack overflow error pascal

s_a_s_h_a
Дата 18.4.2005, 17:47 (ссылка) | (нет голосов) Загрузка .

Опытный

Профиль
Группа: Участник
Сообщений: 261
Регистрация: 20.7.2004
Где: Петрозаводск

Репутация: нет
Всего: 1

Type M=array[1..99,1..99] of integer;
var n1,m1: integer;
a:M;
stolbec : integer;

procedure vvod(n,m:integer;var b:M);
var i,j: integer;
begin
writeln (‘vvedite element’);
for i:=1 to n do
for j:=1 to m do
readln(b[i,j]);
end;

procedure vyvod_matr(n,m:integer;var b:M);
var i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to m do
write(‘ ‘,b[i,j]:5);
writeln;
end;
end;

function find(n,m:integer;b:M):integer;
var i,j: integer;
summ: integer;
max: integer;
begin
max:=0;
for j:=1 to m do
begin
summ:=0;

for i:=1 to n do
summ:=summ+b[i,j];
if max

Возникает ошибка «Stack overflow error» и выкидывает на открывающий begin функции find. Вопрос из-за чего она возникает и как её исправить?
Матрица малой размерности (2х3) и заполняю маленькими целыми числами. Такая же ерунда была, когда find организовывал как процедуру.

SPrograMMer
Дата 18.4.2005, 17:55 (ссылка) | (нет голосов) Загрузка .

Спамер 🙂

Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: нет
Всего: 6

УСЕ хорошо вроде бы.
попробуй выполнить по шагам, свой код, через F7, если компиляторы Borland Pascal или Turbo Pascal.
Stack overflow error — ошибка при переполнении стека. В тапкой простой программе такое может произойти если, происходит зацикливание вызова подпрограммы, то есть что-то типа:

Код
procedure A;
Begin
.
A; // тут.
End;
.
Begin
A;
End.

А у тебя я такого не нашел.

Это сообщение отредактировал(а) SPrograMMer — 18.4.2005, 17:57

Fedor
Дата 18.4.2005, 18:14 (ссылка) | (нет голосов) Загрузка .

Днепрянин

Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32

У тебя процедура find содержит параметр типа M, который занимает слишком много памяти и когда он засовывается в стек, происходит переполнение.
Варианты решения:
1) Уменьшить размер типа M
2) Сделать этот параметр глобалной переменной
3) Нажми Ctrl+O+O, сверху появятся настройку компиляции по умолчанию. Исправь чтоб вторая строчка была примерно такой:

Код
<$M 65384,0,655360>

Т.е. короче говоря увеличь размер стека в программе.

SPrograMMer
Дата 18.4.2005, 18:32 (ссылка) | (нет голосов) Загрузка .

Спамер 🙂

Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: нет
Всего: 6

Цитата(Fedor @ 18.4.2005, 18:14)
параметр типа M, который занимает слишком много памяти

Тогда разве на этапе компиляции ничего не должно выскакивать?!

Fedor
Дата 18.4.2005, 18:49 (ссылка) | (нет голосов) Загрузка .

Днепрянин

Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32

Цитата(SPrograMMer @ 18.4.2005, 18:32)
Тогда разве на этапе компиляции ничего не должно выскакивать?!

Это ведь зависит от размера стека, это не определяется во время компиляции.

SPrograMMer
Дата 18.4.2005, 21:34 (ссылка) | (нет голосов) Загрузка .

Спамер 🙂

Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: нет
Всего: 6

Хорошо, Fedor попробуй объявить следующее:

Код
Type
Dim200x200=Array[1..200,1..200] of Real;
Var
D:Dim200x200;

Получится ли? У меня к сожелению сейчас нет компилятора пасаля под DOS, проверить не могу.

Fedor
Дата 18.4.2005, 22:15 (ссылка) | (нет голосов) Загрузка .

Днепрянин

Профиль
Группа: Участник
Сообщений: 2090
Регистрация: 8.2.2003
Где: Великий

Репутация: нет
Всего: 32

16000 байт. Вот и возникает ашипка. Если мы директивой компилятора увеличим размер стека например хотябы до 30000 то все будет уже ОК.

volvo877
Дата 19.4.2005, 00:07 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Комодератор
Сообщений: 2072
Регистрация: 15.11.2004

Репутация: 2
Всего: 116

Цитата(Fedor @ 18.4.2005, 18:14)
Варианты решения:
1) Уменьшить размер типа M
2) Сделать этот параметр глобалной переменной
3) Нажми Ctrl+O+O, сверху появятся настройку компиляции по умолчанию.

Есть еще 4-ый вариант — изменить заголовок функции find на:

Код
function find(n,m:integer; const b:M):integer;

Можно было бы просто передать по ссылке (var b:M), но для гарантии неизменности данных в массиве b пользуемся const

Это сообщение отредактировал(а) volvo877 — 19.4.2005, 00:36

Zero
Дата 19.4.2005, 01:18 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24

Цитата(Fedor @ 18.4.2005, 22:15)
Если мы директивой компилятора увеличим размер стека например хотябы до 30000 то все будет уже ОК.

А теперь более точная формула для расёта нужного кол-ва байт в стеке:
S=S1+548
где S ─ размер стека;
S1 ─ max<размер памяти любого идентификатора>
Т.е. в данном примере расчитывается так:
S=99*99*2+548=20150;
Т.е. Min размер стека можно указать таким

Код
<$M 20150,0,655360>

И если хоть на один байт уменьшить то будет ошибка.

Это сообщение отредактировал(а) Fedor — 20.4.2005, 17:29

Zero
Дата 19.4.2005, 01:51 (ссылка) | (нет голосов) Загрузка .

Эксперт

Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24

s_a_s_h_a ну типа если тебя бесят взякие ожжибки, ну типа пиши вот так в начале программы:

Код
<$S->

И узё.
Добавлено @ 01:52
Ладно ето шутка, предыдущий способ самый правильный

Это сообщение отредактировал(а) Zero — 19.4.2005, 01:54

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »

[ Время генерации скрипта: 0.1253 ] [ Использовано запросов: 21 ] [ GZIP включён ]

Источник

READ  Vip1003g прошивка под всех операторов

>
Ошибка «Stack overflow»

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



Сообщ.
#1

,
24.05.05, 10:00

    Что значит эта 202 ошибка «Stack overflow»?
    Я никак не могу понять, написал процедуру и вставил в программу, отдельно это процедура как программа работает, но не хочет работать как процедура в другой программе. Выдает ошибку 202. Вчера что-то помучился она работала, седня опять не работает.
    Выкладываю саму процедуру. Её задача открывать уже существующий файл нетекстовой, а двоичный, считывать данные и их сортировать и снова записывать в этот же файл. Доичный файл типа сисок.
    Вот типы чтобы легче было разобраться в конструкции.
    {type
    RecBook = record
    name:string[20];
    phone:string[10];
    end;
    tipfile = file of RecBook;}

    Сама процедура:

    ExpandedWrap disabled

      Procedure Sort (var bookfile:tipfile);

       var

        work:recbook;

        i,j:integer;

        tmps:string[20];

        a,b:array[1..100] of string;

       begin

        Name_File; {еще одна процедура, я ее внизу написал}

        assign(bookfile, name);

        reset(bookfile);

         for i:=0 to filesize(bookfile)-1 do

           begin

            read(bookfile,work);

            a[i]:=work.vardas;

            b[i]:=work.phone;

          end;

            for i:=0 to filesize(bookfile)-2 do

             for j:=i+1 to filesize(bookfile)-1 do

               begin

                if a[i] > a[j] then

                  begin

                   tmps:=a[i];

                   a[i]:=a[j];

                   a[j]:=tmps;

                   tmps:=b[i];

                   b[i]:=b[j];

                   b[j]:=tmps;

                  end;

               end;

      close(bookfile);

      reset(bookfile);

       for i:=0 to filesize(bookfile)-1 do

        with work do

           begin

                vardas:=a[i];

                phone:=b[i];

                write(bookfile,work);

           end;

      close(bookfile);

      end;

    Процедура File_Name:

    ExpandedWrap disabled

      Procedure Name_File;

       begin

            write(‘Vvedite imia faila dannih telefonnogo spravo4nika > ‘);

            readln(name);

       end;

    Зарание спасибо.

    Guru

    volvo877



    Сообщ.
    #2

    ,
    24.05.05, 10:12

      Moderator

      *******

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

      #MadCat#,
      как вызываешь Sort, покажи… А лучше — приаттачь всю программу ;)

      Цитата #MadCat# @ 24.05.05, 10:00

      Что значит эта 202 ошибка «Stack overflow»?

      Цитата

      Эта ошибка генерируется на входе в процедуру или функцию, скомпилированную в режиме {$S+} в случае, если нет достаточной области памяти для размещения локальных переменных подпрограммы…

      Так что если с вызовом все в порядке — придется играть с директивой {$M a, b, c} Конкретнее — с первым параметром, определяющим размер стека. Можно, конечно, просто отключить контроль переполнения стека через {$S-}, но это как раз крайне нежелательно делать…

      Добавлено 24.05.05, 10:15
      Кстати, можно попробовать сделать так:

      ExpandedWrap disabled

        Procedure Sort (var bookfile:tipfile);

        var

          a, b:array[1..100] of string[20]; { <— 20 вместо 255 !!! }

      Тогда в стеке будет заниматься гораздо меньший объем, а тебе строка длиннее 20 символов и не нужна…


      #MadCat#



      Сообщ.
      #3

      ,
      24.05.05, 10:48

        Цитата volvo877 @ 24.05.05, 10:12

        Добавлено 24.05.05, 10:15
        Кстати, можно попробовать сделать так:

        ExpandedWrap disabled

          Procedure Sort (var bookfile:tipfile);

          var

            a, b:array[1..100] of string[20]; { <— 20 вместо 255 !!! }

        Тогда в стеке будет заниматься гораздо меньший объем, а тебе строка длиннее 20 символов и не нужна…

        Во, точно, ты прав. Все теперь работает, спасибо. Ну, почему все-таки происходило переполнение, я несовсем понял?

        Guru

        Romtek



        Сообщ.
        #4

        ,
        24.05.05, 10:48

          пропагандист

          *******

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

          Я так понимаю, что стеки здесь не используются. Остаётся вариант — бесконечная рекурсия в программе (процедура вызвывает саму себя беск. кол-во раз).

          Guru

          volvo877



          Сообщ.
          #5

          ,
          24.05.05, 10:54

            Moderator

            *******

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

            Цитата Romtek @ 24.05.05, 10:48

            Я так понимаю, что стеки здесь не используются.

            Это как «не используются» ? А где же локальные переменные хранятся?

            #MadCat#, массивы

            ExpandedWrap disabled

              a, b:array[1..100] of string;

            занимают в стеке 2 * 100 * 255 байт… Это больше 50Кб. Стек по умолчанию устанавливается в 16384 байта. Так что одно из двух: либо уменьшать размер локальных переменных (что и было сделано), либо увеличивать размер стека…

            Guru

            Romtek



            Сообщ.
            #6

            ,
            24.05.05, 11:00

              пропагандист

              *******

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

              Цитата Romtek @ 24.05.05, 10:48

              Romtek, все проще

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

              Добавлено 24.05.05, 11:03

              Цитата volvo877 @ 24.05.05, 10:54

              Это как «не используются» ? А где же локальные переменные хранятся?

              Это я знаю. Я имел в виду саму структуру данных типа стек.


              #MadCat#



              Сообщ.
              #7

              ,
              24.05.05, 11:11

                volvo877 тут что-то с выводом теперь нето.
                У тебе паскаль имеется? Если да попробуй запустить этот код.
                Я тут выкладываю его без поиска, изменения записи, дополнения они работают.
                Попробуй создать файл внести туда имя и телефон, а потом отсортировать и просмотреть его, там какая-то белеберда с выводом первой и второй записи телефонов.

                ExpandedWrap disabled

                  Program Book;

                  uses crt;

                  Type

                      RecBook = Record

                       vardas: string[20];

                       phone: string[10];

                      End;

                      tipfile = file Of RecBook;

                  Var

                    bookfile: tipfile;

                    work: RecBook;

                    vid: byte;

                    End_Menu: boolean;

                    name: string[12];

                  Procedure Name_File;

                   Begin

                        write(‘Введите имя файла данных телефонного справочника > ‘);

                        readln(name);

                   End;

                  Procedure Sort (Var bookfile:tipfile);

                   Var

                     i,j: integer;

                     tmps: string[20];

                     a,b: array[1..100] Of string[20];

                   Begin

                     Name_File;

                     assign(bookfile, name);

                     reset(bookfile);

                     For i:=0 To filesize(bookfile)-1 Do

                       Begin

                         read(bookfile,work);

                         a[i] := work.vardas;

                         b[i] := work.phone;

                       End;

                        For i:=0 To filesize(bookfile)-2 Do

                          For j:=i+1 To filesize(bookfile)-1 Do

                            Begin

                              If a[i] > a[j] Then

                                Begin

                                  tmps := a[i];

                                  a[i] := a[j];

                                  a[j] := tmps;

                                  tmps := b[i];

                                  b[i] := b[j];

                                  b[j] := tmps;

                                End;

                            End;

                     close(bookfile);

                     reset(bookfile);

                     For i:=0 To filesize(bookfile)-1 Do

                       With work Do

                         Begin

                            vardas := a[i];

                            phone := b[i];

                            write(bookfile,work);

                         End;

                     close(bookfile);

                  End;

                  Procedure Create_book_Phone;

                   Var Ind,Count: integer;

                   Begin

                     Name_File;

                     Assign(Bookfile,name);

                     Rewrite(Bookfile);

                     writeln(‘Создание записей файла ‘, name);

                     write(‘Введите число записей в справочнике ‘);

                     readln(count);

                     For Ind:=1 To count Do

                        Addrec;

                     writeln(‘Создание файла данных телефонного справочника завершено’);

                     writeln(‘Файл данных имеет ‘,Filesize(bookfile),’ записи’);

                     close(bookfile);

                   End;

                  Procedure Outputrec;

                   Begin

                     read(bookfile,work);

                     With work Do

                       Begin

                         write(‘Запись No ‘, Filepos(bookfile),’ : ‘);

                         writeln(‘ФИО: ‘,vardas,’ телефон: ‘,phone);

                       End;

                    End;

                  Procedure OutputAllrec;

                   Begin

                     Name_file;

                     Assign(bookfile,name);

                    {$I-}

                     Reset(bookfile);

                    {$I+}

                     If IOresult = 0 Then

                       Begin

                         seek(bookfile, 0);

                         writeln(‘*** Вывод телефонного справочника из файла ‘,name,’***’);

                         while not Eof(bookfile) Do

                         Outputrec;

                       End

                     Else

                       writeln(‘Файла с именем ‘,name,’ на диске нет’);

                   End;

                  Begin

                    Clrscr;

                    End_menu := false;

                    Repeat

                      writeln(‘*** Телефонный справочник ***’);

                      writeln(‘ Выберите вид работы: ‘);

                      writeln(‘ 1 — создание нового файла’);

                      writeln(‘ 2 — просмотр’);

                      writeln(‘ 3 — изменение записи’);

                      writeln(‘ 4 — дополнение’);

                      writeln(‘ 5 — сортировка’);

                      writeln(‘ 6 — поиск’);

                      writeln(‘ 0 — exit’);

                      write(‘Ваш выбор ‘);

                      readln(vid);

                      Case vid Of

                        1:  Create_book_phone;

                        2:  Outputallrec;

                        3:  Updaterec;

                        4:  Addrectoend;

                        5:  sort(bookfile);

                        6:  search_pavarde;

                        0:  end_menu := true;

                      End;

                      writeln(‘для продолжения нажмите Enter’);

                      readln;

                      clrscr;

                    Until end_menu;

                   End.

                Guru

                Romtek



                Сообщ.
                #8

                ,
                24.05.05, 11:26

                  пропагандист

                  *******

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

                  Файл не компилируется — неполная версия.
                  Что значит «белибрда» ?

                  Добавлено 24.05.05, 11:29
                  Почему work описана как глобальная переменная, а ты вводишь её ещё как локальную в Sort ?

                  Сообщение отредактировано: Romtek — 24.05.05, 11:30

                  Guru

                  volvo877



                  Сообщ.
                  #9

                  ,
                  24.05.05, 11:37

                    Moderator

                    *******

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

                    #MadCat#,
                    я тебе и без компиляции скажу, где проблема:

                    ExpandedWrap disabled

                      Procedure Sort (var bookfile:tipfile);

                      var

                        a,b:array[1..100] of string[20];

                      begin

                        for i:=0 to filesize(bookfile)-1 do begin

                          read(bookfile,work);

                          a[i]:=work.vardas; { <— Вот тут проблема }

                          b[i]:=work.phone;

                        end;

                    Ты же обращаешься к нулевому элементу, а он не определен…
                    Если уж на то пошло, то я бы делал немного иначе (использовал бы счетчик, и при сортировке не привязывался к размеру файла, не нужно это никому…) :

                    ExpandedWrap disabled

                      var count: integer;

                      count := 0;

                      while not eof(bookfile) do begin

                        read(bookfile,work); inc(count);

                        a[count]:=work.vardas;

                        b[count]:=work.phone;

                      end;

                      for i:=1 to pred(count) do

                        for j:=i+1 to count do begin

                          …

                        end;


                    #MadCat#



                    Сообщ.
                    #10

                    ,
                    24.05.05, 12:03

                      Цитата Romtek @ 24.05.05, 11:26

                      Файл не компилируется — неполная версия.
                      Что значит «белибрда» ?

                      Добавлено 24.05.05, 11:29
                      Почему work описана как глобальная переменная, а ты вводишь её ещё как локальную в Sort ?

                      Белиберда — это я имел ввиду, что там пишет какие-то неясные символы.

                      А кто мне мешает переменную Work использовать в процедуре? Ну и что, что она глобальная, она как вспомогательная идет и в разных процедурах принимает разные значения типа списка.

                      Цитата

                      Если уж на то пошло, то я бы делал немного иначе (использовал бы счетчик, и при сортировке не привязывался к размеру файла, не нужно это никому…) :

                      Да этот способ куда лучше, теперь нормально, т.е. теперь я могу не задавать в масиве String[20]? Можно просто, как String и переполнений не будет?

                      Добавлено 24.05.05, 12:06
                      А, нет ругается все все-таки надо задавать ограничение.

                      Guru

                      volvo877



                      Сообщ.
                      #11

                      ,
                      24.05.05, 12:13

                        Moderator

                        *******

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

                        Цитата #MadCat# @ 24.05.05, 12:03

                        Можно просто, как String и переполнений не будет?

                        :no: Не меняй на String… Опять получишь «Stack Overflow», у тебя же опять размер локальных переменных увеличится…

                        А хочешь еще одно улучшение? Смотри:

                        ExpandedWrap disabled

                          Procedure Sort (Var bookfile:tipfile);

                          Var

                            tmps: RecBook;

                            arr: array[1..100] Of RecBook;

                          Begin

                            …

                            Count := 0;

                            While not Eof(bookfile) Do Begin

                              Inc(count);

                              Read(bookFile, arr[count]);

                            End;

                            for i:=1 to pred(count) do

                              for j:=i+1 to count do begin

                                if arr[i].vardas > arr[j].vardas then begin

                                  tmps := arr[i]; arr[i] := arr[j]; arr[j] := tmps;

                                end;

                            reset(bookfile);

                            For i:=1 To count do

                              write(bookfile, arr[i]);

                            …

                        Guru

                        Romtek



                        Сообщ.
                        #12

                        ,
                        24.05.05, 12:23

                          пропагандист

                          *******

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

                          Цитата #MadCat#

                          ExpandedWrap disabled

                               close(bookfile);

                               reset(bookfile);

                               For i:=0 To filesize(bookfile)-1 Do

                                 With work Do

                                   Begin

                                      vardas := a[i];

                                      phone := b[i];

                                      write(bookfile,work);

                                   End;

                               close(bookfile);

                          Ты сначала закрываешь файл, потом снова открываешь. Зачем?
                          Можно просто установить указатель файла на нулевую запись (начало) с помошью Seek (bookfile, 0);
                          Тогда

                          ExpandedWrap disabled

                               close(bookfile);

                               reset(bookfile);

                          можно удалить.

                          Добавлено 24.05.05, 12:27

                          Цитата #MadCat# @ 24.05.05, 12:03

                          А кто мне мешает переменную Work использовать в процедуре? Ну и что, что она глобальная, она как вспомогательная идет и в разных процедурах принимает разные значения типа списка.

                          Чтобы по ошибке не подумать, что она имеет то же значение, что и в глобальной переменной.

                          Кстати, значения полей записи не нужно менять, т.к. ТП7 допускает присвоение записи значения другой записи, т.е.

                          ExpandedWrap disabled

                            temp := work1;

                            work1 := work2;

                            work2 := temp;


                          #MadCat#



                          Сообщ.
                          #13

                          ,
                          24.05.05, 12:40

                            Цитата volvo877 @ 24.05.05, 12:13

                            Цитата #MadCat# @ 24.05.05, 12:03

                            Можно просто, как String и переполнений не будет?

                            :no: Не меняй на String… Опять получишь «Stack Overflow», у тебя же опять размер локальных переменных увеличится…

                            А хочешь еще одно улучшение? Смотри:

                            ExpandedWrap disabled

                              Procedure Sort (Var bookfile:tipfile);

                              Var

                                tmps: RecBook;

                                arr: array[1..100] Of RecBook;

                              Begin

                                …

                                Count := 0;

                                While not Eof(bookfile) Do Begin

                                  Inc(count);

                                  Read(bookFile, arr[count]);

                                End;

                                for i:=1 to pred(count) do

                                  for j:=i+1 to count do begin

                                    if arr[i].vardas > arr[j].vardas then begin

                                      tmps := arr[i]; arr[i] := arr[j]; arr[j] := tmps;

                                    end;

                                reset(bookfile);

                                For i:=1 To count do

                                  write(bookfile, arr[i]);

                                …

                            А понятно всё. Тоже вариант неплохой.

                            Цитата

                            Ты сначала закрываешь файл, потом снова открываешь. Зачем?
                            Можно просто установить указатель файла на нулевую запись (начало) с помошью Seek (bookfile, 0);

                            Точно.Попробую.


                            #MadCat#



                            Сообщ.
                            #14

                            ,
                            24.05.05, 20:01

                              Цитата volvo877 @ 24.05.05, 10:54

                              #MadCat#, массивы

                              ExpandedWrap disabled

                                a, b:array[1..100] of string;

                              занимают в стеке 2 * 100 * 255 байт… Это больше 50Кб.

                              2*100*255=51000 байт, а 51000/1024=49,8kb… < 50kb

                              Guru

                              volvo877



                              Сообщ.
                              #15

                              ,
                              24.05.05, 20:28

                                Moderator

                                *******

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

                                Смысл от этого не изменился. Это все равно больше значения по умолчанию.

                                Guru

                                Romtek



                                Сообщ.
                                #16

                                ,
                                25.05.05, 06:49

                                  пропагандист

                                  *******

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

                                  Цитата #MadCat# @ 24.05.05, 20:01

                                  2*100*255=51000 байт, а 51000/1024=49,8kb… < 50kb

                                  Цитата volvo877 @ 24.05.05, 20:28

                                  Смысл от этого не изменился. Это все равно больше значения по умолчанию.

                                  А по-моему ошибка не из-за этого.

                                  ExpandedWrap disabled

                                    var

                                       a, b: array[1..100] of string;

                                       s: string;

                                       i: byte;

                                    begin

                                         s := »;

                                         for i := 1 to 255 do

                                             s := s + chr(i);

                                         for i := 1 to 100 do

                                             a[i] := s;

                                         a := b;

                                    end.

                                  Почему тогда здесь такой ошибки не возникает?

                                  Guru

                                  volvo877



                                  Сообщ.
                                  #17

                                  ,
                                  25.05.05, 06:59

                                    Moderator

                                    *******

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

                                    Цитата Romtek @ 25.05.05, 06:49

                                    Почему тогда здесь такой ошибки не возникает?

                                    здесь a и b — глобальные переменные, следовательно размещаются они в сегменте данных, а не в стеке… А размер DS = 64К. Но попробуй сделать так:

                                    ExpandedWrap disabled

                                      var

                                         a, b, c: array[1..100] of string;

                                    Что будет? Сегмент данных переполняется и … «Too many variables» :whistle: В случае же локальных переменных — переполняется стек. Кстати, попробуй в исходной программе добавить {$M 65520, 0, 0} и переполнения уже не будет.

                                    Guru

                                    Romtek



                                    Сообщ.
                                    #18

                                    ,
                                    25.05.05, 22:49

                                      пропагандист

                                      *******

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

                                      Я пробовал также и с локальными переменными в процедуре, и тоже не было проблем (только если не больше двух переменных).
                                      В программе Ash только 2 переменные.

                                      Guru

                                      volvo877



                                      Сообщ.
                                      #19

                                      ,
                                      26.05.05, 06:13

                                        Moderator

                                        *******

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

                                        Ты хочешь сказать, что вот это:

                                        ExpandedWrap disabled

                                          procedure test;

                                          var

                                            a, b: array[1..100] of string;

                                            s: string;

                                            i: byte;

                                          begin

                                            s := »;

                                            for i := 1 to 255 do

                                              s := s + chr(i);

                                            for i := 1 to 100 do

                                              a[i] := s;

                                            a := b;

                                          end;

                                          begin

                                            test;

                                          end.

                                        у тебя компилируется и отрабатывает без ошибок? :wacko: В Турбо-Паскале? У меня при входе в процедуру — «Stack Overflow». Может в FPC это и сработает, но в TP — нет… Кстати, возможно дело в этом: зайди в «Options -> Memory Sizes» и посмотри установленный по умолчанию размер стека. Может ты его переустанавливал. У меня он равен 16384…

                                        Guru

                                        Romtek



                                        Сообщ.
                                        #20

                                        ,
                                        26.05.05, 07:49

                                          пропагандист

                                          *******

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

                                          Цитата volvo877 @ 26.05.05, 06:13

                                          Ты хочешь сказать, что вот это:

                                          ExpandedWrap disabled

                                            procedure test;

                                            var

                                              a, b: array[1..100] of string;

                                              s: string;

                                              i: byte;

                                            begin

                                              s := »;

                                              for i := 1 to 255 do

                                                s := s + chr(i);

                                              for i := 1 to 100 do

                                                a[i] := s;

                                              a := b;

                                            end;

                                            begin

                                              test;

                                            end.

                                          у тебя компилируется и отрабатывает без ошибок? :wacko: В Турбо-Паскале?

                                          :yes:
                                          В настройках ничего не менял, стоит 16384 :unsure:

                                          Guru

                                          volvo877



                                          Сообщ.
                                          #21

                                          ,
                                          26.05.05, 07:54

                                            Moderator

                                            *******

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

                                            «Options -> Compiler -> Stack Checking» включен? При выключенном и у меня работает, но … Сам понимаешь, чем это может кончиться ;)

                                            Guru

                                            Romtek



                                            Сообщ.
                                            #22

                                            ,
                                            26.05.05, 08:03

                                              пропагандист

                                              *******

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

                                              Цитата volvo877 @ 26.05.05, 07:54

                                              «Options -> Compiler -> Stack Checking» включен?

                                              …выключен.

                                              Цитата volvo877 @ 26.05.05, 07:54

                                              ам понимаешь, чем это может кончиться

                                              Buffer Overflow? :D

                                              Guru

                                              volvo877



                                              Сообщ.
                                              #23

                                              ,
                                              26.05.05, 08:21

                                                Moderator

                                                *******

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

                                                Цитата Romtek @ 26.05.05, 08:03

                                                Buffer Overflow? :D

                                                А попробуй запустить вот эту (правильную) программу:

                                                ExpandedWrap disabled

                                                  {$m 60000, 0, 0}

                                                  procedure test;

                                                  var

                                                    a, b: array[1..100] of string;

                                                    s: string;

                                                    i, count: byte;

                                                  begin

                                                    s := »;

                                                    for i := 1 to 255 do

                                                      s := s + chr(i);

                                                    for i := 1 to 100 do

                                                      a[i] := s;

                                                    for i := 1 to 100 do

                                                      if a[1] <> a[i] then inc(count);

                                                    writeln(count);

                                                    a := b;

                                                  end;

                                                  begin

                                                    test;

                                                  end.

                                                и свою:

                                                ExpandedWrap disabled

                                                  procedure test;

                                                  var

                                                    a, b: array[1..100] of string;

                                                    s: string;

                                                    i, count: byte;

                                                  begin

                                                    s := »;

                                                    for i := 1 to 255 do

                                                      s := s + chr(i);

                                                    for i := 1 to 100 do

                                                      a[i] := s;

                                                    for i := 1 to 100 do

                                                      if a[1] <> a[i] then inc(count);

                                                    writeln(count);

                                                    a := b;

                                                  end;

                                                  begin

                                                    test;

                                                  end.

                                                И посмотри на результаты :blink: Чувствуешь разницу?

                                                Guru

                                                Romtek



                                                Сообщ.
                                                #24

                                                ,
                                                26.05.05, 09:41

                                                  пропагандист

                                                  *******

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

                                                  Без галочки:
                                                  0 — твоя (проблем нет)
                                                  0 — моя (проблем нет)

                                                  С галочкой:
                                                  0 — твоя (проблем нет)
                                                  Stack overflow error (понятное дело! Вопрос: «на что это может повлиять?»)

                                                  Guru

                                                  volvo877



                                                  Сообщ.
                                                  #25

                                                  ,
                                                  26.05.05, 09:50

                                                    Moderator

                                                    *******

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

                                                    Я не о том, что есть или нет проблемы :) Сколько она тебе печатает? У меня без директивы {$M} (и без галочки, естественно) печатает число 24, то есть 24 (!!!) несовпадения 1-го элемента с последующими, а с директивой {$M} несовпадений нет…

                                                    А сколько по-твоему НЕсовпадений должно быть?

                                                    Guru

                                                    Romtek



                                                    Сообщ.
                                                    #26

                                                    ,
                                                    26.05.05, 09:58

                                                      пропагандист

                                                      *******

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

                                                      Я же написал, печатает 0 (ноль) без галки в обеих программах. Проверял 5 раз: то есть никаких отклонений не было найдено.

                                                      Цитата volvo877 @ 26.05.05, 09:50

                                                      А сколько по-твоему НЕсовпадений должно быть?

                                                      Наверно зависит от того, насколько переполнен стек…не хочу гадать.

                                                      Добавлено 26.05.05, 10:19
                                                      Я считаю, что проверки компилятора нужны только на этапе отладки программы, а в релизе программист должен учесть все варианты.

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

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

                                                      • Предыдущая тема
                                                      • Pascal
                                                      • Следующая тема

                                                      [ Script execution time: 0,1190 ]   [ 15 queries used ]   [ Generated: 29.01.23, 02:02 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тановлена.


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

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

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

                                                    • Яшка сломя голову остановился исправьте ошибки
                                                    • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
                                                    • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
                                                    • Stack overflow ошибка pascal
                                                    • Ssangyong actyon ошибка p0113