簡體   English   中英

程序停止使用fgets讀取文件

[英]Program stop reading file using fgets

如果有人可以幫助我完成我的“程序”,那就太好了。 我正在嘗試讀取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;
}

您尚未為tab完全分配內存。 您剛剛分配了一個(未初始化的)指針。 當i> 0時,您進入不確定行為。 您需要分配的元素數量至少應與文件中的行數一樣多,例如

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

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

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

您僅在此數組中分配1個元素。 所有其他訪問都在寫未分配的內存塊,並且可能造成損壞。

嘗試定期重新realloc

您在標簽中僅創建了一個雙*號,如果您知道要存儲的行數,請執行以下操作:

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

另外,不要強制轉換malloc的返回值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM