ファイルから動的構造体配列にデータを読み込もうとしています。ファイルからデータを読み込んで動的構造体配列を再配置するときのSegfault
1行のデータ(配列サイズ1)では動作するようですが、それ以上の大きさの場合はsegfaultを取得します。私はコーディングではかなり経験がないので、それを引き起こしていることを完全に失っています。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
int a;
int b;
} Structure;
void Tester(Structure **Data)
{
Structure Input; size_t Number = 0;
*Data = NULL;
FILE *File = fopen("file.txt", "r");
while(2 == fscanf(File, "%d %d", &Input.a, &Input.b))
{
printf("Before: %d\n",Number);
Number++;
Structure *NewInput = realloc(*Data, Number * sizeof(Structure));
*Data = NewInput;
printf("After: %d\n",Number);
*Data[Number - 1] = Input;
}
fclose(File);
}
int main()
{
Structure *TestData;
Tester(&TestData);
printf("%d %d", TestData[0].a, TestData[0].b);
return 0;
}
それがなかったとき、私が使用したテキストファイルだけでプログラムが働いていた「1 2」、および「1 2 3 4」が含まれていました。ここで
は、関連するコードです。行でエラーoccours:
*Data[Number - 1] = Input;
は、だから私はreallocのは、最初のループの後に正常に動作していないという感覚を得ます。すべてのヘルプやアドバイスは大歓迎です! []
オペレータは単項*
オペレータとa[b]
より高い優先順位を有するので
後置演算子は単項演算子よりも高い優先度を持ちます。 '(* Data)[Number-1] =入力; 'を使用してください。 – EOF
@EOF答えとして投稿する – Barmar
'fopen()'が成功したかどうかを確認する必要があります。 – MikeCAT