0

誰かが私の「プログラム」を手伝ってくれたらいいのにと思います。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;
}
4

3 に答える 3

0

保存する行数がわかっている場合は、タブに double * を 1 つだけ配置する場所を作成しました。次のようにします。

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

また、malloc のリターンをキャストしないでください。

于 2012-11-08T17:06:54.153 に答える
0

まだ完全にメモリを割り当ててtabいません。1 つの (初期化されていない) ポインターを割り当てただけです。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 に答える