分段故障(核心转储) - 错误在哪里?

时间:2014-03-31 13:48:35

标签: c segmentation-fault coredump

我有一个基本的C程序,我必须为个人软件进程分配。我对C来说相当新,所以老实说,我无法看到我出错的地方。请仔细阅读并让我知道我做了什么导致它崩溃?

我必须读取文件,并将值存储为数组。它没有编译错误,只是一个分段错误。

#include <stdio.h>
#define array_limit   100

int main (void)

{  
  FILE *ifp;
  char *mode = "r";
  ifp = fopen("samplepopulation.txt", mode);  


  if (ifp==NULL)
  {
    printf("cannot read file \n");
  }  
  else
  {   
    int i;
    float sample; 

    float values[array_limit];
    i = 0;

    do
    {
       fscanf(ifp, "%f", &sample);
       if (!feof(ifp))
       {
          values[i] = sample;
          printf("%f \n", values[i]);
          i++;
            if (i>array_limit)
            {
               printf("File larger than allowed/n");
               break;
            }
       }

       else
       {
          printf("read complete");
       }

    } while (ifp!= EOF);     
  }

  fclose(ifp);

  return 0;
}

2 个答案:

答案 0 :(得分:0)

更改

while (ifp!= EOF);  

while (!feof(ifp)); 

同样从文件中扫描:

if (fscanf(ifp, "%f", &sample)==EOF) //EOF if input failure
   break;

答案 1 :(得分:0)

您可能想要更改此

fclose(ifp);

成为

if (NULL != ifp)
{
  fclose(ifp);
}

或者只是进入else分支:

    ...

    fclose(ifp)
  }

  return 0;
}