1

コードで segfault が発生しましたが、その理由がわかりません。配列を動的に割り当てるために、ファイルを読み込んで行数を数えます。次に、ファイルを巻き戻し、ファイル内のデータを読み取り、データを変数に格納してから、読み取った変数を配列に格納しますが、文字に問題があります。

   ...
   char *aname = malloc(sizeof(char) * 3); 
   ... 
   // get # lines in file (count)
   ... 
   char *aname_seen = malloc(count * (sizeof(char) * 3));
   ...
   rewind(file);
   while (fgets(buff, sizeof buff, file) != NULL) 
   {
      if (sscanf(buff, "%s %d %s %s %d %lf %lf %lf %lf %lf\n", 
         atm, &serial, aname, resName, &resSeq, &x, &y, &z, 
         &occupancy, &tempFactor) == 10)
      {
         aname_seen[i] = *aname;
         printf("%d: %s vs %s\n", i, aname, aname_seen[i]);

         i++;

      } // end sscanf if-loop

   } // end while loop

aname をprintf("%d: %s\n", i, aname)出力して期待される出力を得ることができますが、Segmentation fault (core dumped)試してみると得られprintf("%d: %s vs %s\n", i, aname, aname_seen[i])ます。

この while ループ + ネストされた if ループは、行数をカウントするために使用する規則と同じであるため、iカウントまでインクリメントします。aname_seen を間違って割り当てて、実際に要素count数を与えていませんか? char*3私はチャーをいじることに精通していません。数値の Fortran バフなので、方向性が必要です。

前もって感謝します!

4

2 に答える 2