2012-11-08 31 views
0

如果有人能够帮助我完成“程序”,那将会很好。我正在尝试读取csv文件并将其移至2D数组。它停在17号线(满分200)。使用fgets程序停止读取文件

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; 
} 
+2

您还没有完全为'tab'分配内存。 –

+0

此外,它很小,但我相当肯定你的意思是缓冲区而不是bufor! – Benj

+0

我遇到了最大的问题。不知道为什么它是错的。我正在关注这个例子[链接](http://stackoverflow.com/questions/4237428/two-dimensional-array-matrix-memory-allocation-troubles) – Norrec

回答

0

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

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

,或者使用realloc每次迭代之后,以增加元件的数目。

+0

感谢您的帮助,我将尽力与realloc合作! – Norrec

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

你只在这个数组中分配1个元素。所有其他访问都在写入未分配的内存块,并可能导致损坏。周期性地尝试realloc

0

您在标签创建的地点只有一个双*,如果你知道你要存储的行数,然后执行:

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

另外,不要投malloc的回报。