数组分段故障结束

时间:2014-02-20 23:54:54

标签: c arrays segmentation-fault

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

似乎正在发生的是代码的打印部分按预期工作。它打印出数组中的每个项目。错误出现在最后 - 在最后一个项目打印出来之后,终端抛出了一个分段错误。

经过一些测试后,我得出结论,每当我尝试在阵列中打印出一个元素时,就会发生这种情况,无论是打印完整的还是打印出来的一部分。我甚至尝试打印出阵列的第一个“线” - 它返回线路很好,但之后又扔了同样的故障。

我是C的完全初学者,但怀疑问题在于覆盖了我的数组中的null终止符。无论是这种情况还是不是这种情况,我都不确定如何解决这个问题。有什么建议吗?

#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]);
           }
       }
  }

}

1 个答案:

答案 0 :(得分:1)

您的代码似乎正在运作。

我看到的唯一“陌生感”是您在close上使用fin而不是fclose ,这可能会导致问题。此外,它还显示您没有在启用所有警告的情况下运行编译器。

如果您无法更好地查明问题根源,请尝试在valgrind下运行可执行文件。我做了,但没有PPM方便,我用固定值的赋值替换了所有读取;尝试做同样的事情(例如,将所有像素分配给0),如果这“解决”了问题,那么你的文件格式就会引起麻烦。