Je me suis gratté la tête pendant des heures. Cela lit les données d'un fichier texte dans la structure (chaque ligne a quatre chaînes, et chaque ligne représente un nouvel étudiant). Je reçois un défaut de seg sur le realloc (près de la fin). Je soupçonne que je ne comprends pas comment le pointeur interagit avec malloc/realloc.Utilisation de realloc sur une matrice de structures
struct student* createInitialStudentArray(FILE *fp) {
char buf[20+1] = {0};
int word = 1, studcount = 1;
struct student* studentArray = malloc(sizeof(struct student));
assert(studentArray != NULL);
while (fscanf(fp, " %20s", buf) != EOF) {
if (word % 4 == 1) {
sscanf(buf, "%4d", &studentArray[studcount].studentID);
word++;
}
else if (word % 4 == 2) {
strcpy(studentArray[studcount].lastName, buf);
word++;
}
else if (word % 4 == 3) {
strcpy(studentArray[studcount].firstName, buf);
word++;
}
else if (word % 4 == 0) {
sscanf(buf, "%10lld", &studentArray[studcount].phoneNumber);
word = 1;
studcount++;
studentArray = realloc(studentArray, studcount * sizeof(struct student));
assert(studentArray != NULL);
}
}
return studentArray;
}
Quelle est l'origine de ce défaut de seg?
Merci à l'avance,
Gus
dépit de ne pas être la cause racine de votre segfault, la façon dont vous utilisez realloc peut conduire à des fuites de mémoire lorsque realloc ne peut pas allouer plus de mémoire , car il retournera NULL et vous perdrez le pointeur vers le tampon précédent – Vitor