【问题标题】:End Of Array Segmentation Fault数组分段错误结束
【发布时间】:2014-02-20 23:54:54
【问题描述】:

我在尝试使用 C 以数字方式绘制几个圆圈时遇到了一个看起来很奇怪的问题。

似乎正在发生的事情是代码的打印输出部分按预期工作。它打印出数组中的每一项。错误出现在最后——在打印出最后一项后,终端立即抛出分段错误。

经过一些测试,我得出结论,每次尝试打印数组中的一个元素时都会发生这种情况,无论我是打印完整的还是部分的。我什至尝试打印出数组的第一“行”——它返回的行很好,但之后又抛出了同样的错误。

我完全是 C 初学者,但我怀疑问题出在我的数组中覆盖了空终止符。不管是不是这样,我不知道如何解决这个问题。有什么建议吗?

#include <stdio.h>
#define EW 707
#define EH 600

int ec[EH][EW][3] ;
int main(void)
{
   int y , x , blah ;
   char arr[80] ;
   FILE* fin ;
   fin = fopen( "input.ppm" , "r" ) ;
   fscanf( fin , "%s" , arr   ) ;
   fscanf( fin , "%d" , &blah ) ; 
   fscanf( fin , "%d" , &blah ) ; 
   fscanf( fin , "%d" , &blah ) ; 

   for( y = 0 ; y < EH ; y++ )
   {
   for( x = 0 ; x < EW ; x++)
      {
         fscanf( fin , "%d" , ec[y][x] + 0 ) ;
         fscanf( fin , "%d" , ec[y][x] + 1 ) ;
         fscanf( fin , "%d" , ec[y][x] + 2 ) ;
      }
   }
   close( fin ) ;
   for(y = 0; y < EH; y++)
   {
       for(x = 0; x < EW; x++)
       {
           for(blah = 0; blah < 3; blah++)
           {
               printf("%d %d %d \n", y, x, blah);
               printf("%d \n", ec[y][x][blah]);
           }
       }
  }

}

【问题讨论】:

  • 您确定您的错误在于printf 语句吗?你的代码在segfaulting 之前运行的最后一条指令是什么?
  • 哦,天哪...我以为我已经注释掉了其余的代码,结果我没有。非常感谢!

标签: c arrays segmentation-fault


【解决方案1】:

您的代码似乎正在运行。

我看到的唯一“奇怪之处”是您在fin 上使用close 而不是fclose,这可能会导致问题。此外,它表明您没有在启用 all 警告的情况下运行编译器。

如果您无法更好地查明问题的根源,请尝试在valgrind 下运行可执行文件。我做到了,但没有方便的 PPM,我用固定值的赋值替换了所有读取;尝试做同样的事情(例如,将所有像素分配为 0),如果这“解决”了问题,那么是文件格式中的某些内容导致了问题。

【讨论】:

  • 很好的观察,我没有看到close 而不是fclose
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多