程序停止使用fgets读取文件

时间:2012-11-08 17:01:16

标签: c file csv fopen

如果有人可以帮助我完成我的“计划”,那就太好了。我正在尝试读取csv文件并将其移动到2D数组。它停在第17行(满分为200)。

    int main ()
{
   FILE * pFile;
   double **tab;
   char bufor [100];
   int i=0;
   tab = (double**)malloc(sizeof(double*));

   pFile = fopen ("sygnal1.csv" , "r");
   if (pFile == NULL) printf("Error");
   else 
        while (fgets (bufor , 100 , pFile))
            {
            tab[i] = (double *) malloc(2 * sizeof(double));
            sscanf(bufor, "%lf, %lf,", &tab[i][0], &tab[i][1]);
            printf("%lf.%lf.\n",tab[i][0],tab[i][1]);  //It's here only for testing
            i++;
            }
    printf("number of lines read %d\n",i);
    fclose (pFile);
    system("PAUSE");
    return 0;
}

3 个答案:

答案 0 :(得分:0)

您尚未为tab完全分配内存。你刚刚分配了一个(未初始化的)指针。当我> 0你进入未定义的行为。您需要至少分配与文件中可能有行数相同的元素,例如

   tab = malloc(sizeof(*tab) * MAX_LINES);

或在每次迭代后使用realloc来增加元素数量。

答案 1 :(得分:0)

tab = (double**)malloc(sizeof(double*));

您只在此数组中分配1个元素。所有其他访问都是在未分配的内存块上写入,可能会造成损坏。

定期尝试realloc

答案 2 :(得分:0)

您在标签中仅创建了一个双*的地方,如果您知道要存储的行数,请执行以下操作:

tab = malloc(sizeof(*tab) * NB_LINES);

另外,不要强制转换malloc。