J'essaie de lire les données d'un fichier dans un tableau struct struct, la taille du tableau étant étendue via realloc pour prendre en compte des données supplémentaires.Segfault lors de la lecture des données du fichier pour réallouer le tableau struct struct
Il semble fonctionner pour une seule ligne de données (taille de tableau 1), mais rien de plus gros et je reçois un segfault. Je suis assez inexpérimenté au codage, donc je suis complètement perdu sur ce qui le cause.
Voici le code correspondant:
#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;
}
Le fichier texte que j'ai utilisé ne contenait que « 1 2 » lorsque le programme a fonctionné, et « 1 2 3 4 » quand il ne l'a pas. Les occours d'erreur à la ligne:
*Data[Number - 1] = Input;
Je le sentiment que le realloc ne fonctionne pas correctement après la première boucle. Toute aide ou conseil sera grandement apprécié!
Les opérateurs de postfixe ont une priorité plus élevée que les opérateurs unaires. Utilisez '(* Data) [Number - 1] = Input;'. – EOF
@EOF Postez la réponse – Barmar
Vous devriez vérifier si 'fopen()' a réussi. – MikeCAT