Ненулевой статус выхода: 216 (Pascal) .. Как я могу исправить эту ошибку? - PullRequest
0 голосов
/ 11 февраля 2020

Я перепробовал все: изменить тип данных, инициализировать переменные перед их использованием, но ничего не помогло, в чем проблема?

Program Criptmat;
   type Matrice = array[1..20,1..20] of char;

    var x : Matrice;
     s,s1 : string;
      i,j,n,k,l : integer;
        f,f1 : text;

begin
 assign(f,'criptmat.in');
  reset(f);
   readln(f,n);
  readln(f,s);
 close(f);

   k:=1;
    l:=length(s) div n;

    for i:=1 to l do
     if i mod 2 = 1 then
      for j:=1 to n do  
        begin
          x[i,j]:=s[k];
         k:=k+1;
        end else
       if i mod 2 = 0 then
        for j:=n downto 1 do 
         begin
          x[i,j]:=s[k];
           k:=k+1;
         end;

     s1:='';

    for j:=1 to n do
     for i:=1 to l do
      s1:=s1+x[i,j];

 assign(f1,'criptmat.out');
  rewrite(f1);
   writeln(f1,s1);
  close(f1);
 end.

Пожалуйста, помогите мне исправить эту ошибку, чтобы избежать этой ошибка в будущем, спасибо!

1 Ответ

0 голосов
/ 11 февраля 2020

Ошибка 216 в fp c является нарушением доступа или ошибкой сегмента, в зависимости от предпочитаемой вами терминологии. Это происходит, когда вы пытаетесь получить доступ к недопустимому адресу памяти. Обычно это происходит, когда вы пытаетесь получить доступ к массиву за его пределами или получить доступ к динамически выделенной памяти, которая уже была освобождена.

В вашем случае вполне вероятно, что вы обращаетесь к массиву за пределами. Используйте отладчик, чтобы найти точку отказа и проверить значение ваших индексов в этой точке выполнения. Это сообщит вам, какой доступ недопустим, и тогда вы сможете приступить к исправлению ошибок logi c, которые приводят к выходу за пределы.

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

...