0

如果有人可以帮助我完成我的“程序”,那就太好了。我正在尝试读取 csv 文件并将其移动到二维数组。它停在第 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;
}
4

3 回答 3

0

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

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

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

于 2012-11-08T17:04:39.960 回答
0
tab = (double**)malloc(sizeof(double*));

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

realloc定期尝试。

于 2012-11-08T17:05:16.997 回答
0

您在选项卡中只为一个双 * 创建了位置,如果您知道要存储的行数,请执行以下操作:

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

另外,不要强制返回 malloc。

于 2012-11-08T17:06:54.153 回答