非零退出状态:216(帕斯卡)。。如何解决此错误?

问题描述 投票:0回答:1

我尝试了一切:在使用它们之前更改数据类型,初始化变量,但没有任何效果,这是什么问题?

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.

请,请帮助我解决此错误,以避免将来再次出现此类错误,谢谢!

freepascal
1个回答
0
投票

fpc中的错误216是访问冲突或段错误,具体取决于您的首选术语。当您尝试访问无效的内存地址时,会发生这种情况。通常,当您尝试访问超出其范围的数组或访问已被释放的动态分配的内存时,通常会发生这种情况。

在您的情况下,您可能超出了访问数组的范围。使用调试器定位故障点,并在该执行点检查索引的值。这将告诉您哪些访问无效,然后您可以着手解决导致超出范围的访问的逻辑错误。

帮助此类调试的有用工具是启用范围检查编译选项。这将注入运行时代码以验证每个数组访问。您将发现启用该功能可以更轻松地调试这些故障。

© www.soinside.com 2019 - 2024. All rights reserved.