Ich versuche, Daten aus einer Datei in ein dynamisches Struct-Array zu lesen, wobei die Array-Größe über Realloc erweitert wird, um zusätzliche Daten aufzunehmen.Segfault beim Lesen von Daten aus der Datei zum erneuten Zuweisen dynamischer Struct-Arrays
Es scheint für eine einzelne Zeile von Daten (Array-Größe 1) zu funktionieren, aber alles größer und ich bekomme einen segfault. Ich bin ziemlich unerfahren im Codieren, also bin ich völlig verloren in dem, was es verursacht. Hier
ist der entsprechende Code:
#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;
}
Die Textdatei, die wir enthalten ist, verwenden nur ‚1 2‘, wenn das Programm gearbeitet, und ‚1 2 3 4‘, wenn es nicht. Die Fehler occours an der Linie:
*Data[Number - 1] = Input;
So habe ich das Gefühl, dass der realloc nicht richtig nach der ersten Schleife arbeitet. Jede Hilfe oder Beratung wird sehr geschätzt!
Postfix-Operatoren haben höhere Priorität als unäre Operatoren. Verwenden Sie '(* Data) [Number - 1] = Input;'. – EOF
@EOF Post es als Antwort – Barmar
Sie sollten überprüfen, ob 'fopen()' erfolgreich war. – MikeCAT