[英]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.