Bonjour tout le monde !

Me revoici de retour sur ces forums pour vous poser une nouvelle question, à laquelle je ne trouve pas de réponse ...
J'ai deux structures imbriquées l'une dans l'autre, que je souhaite enregistrer sous format binaire.

Voici mes deux structures :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
typedef struct{
    char nomClasse[MAX_CHAR];
    int nbEtu;
    int compteurMatricule;
    T_Etudiant * eleves;
}T_Classe;
Et :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
typedef struct
{
    char matricule[MAX_CHAR];
    char nom[MAX_CHAR];
    char prenom[MAX_CHAR];
    double tabCotes[5];
    double moyennePourcentage;
    char rue[MAX_CHAR];
    char ville[MAX_CHAR];
    int num;
    int cp;
}T_Etudiant;
Lorque je sauvegarde ces deux structures, j'utilise la méthode suivante : (2 fwrite de suite, car on ne peut pas écrire directement une structure en contenant une autre ...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void sauvegarderClasse(T_Classe classe, char *nomSection, char *nomAnnee){
	FILE *fichier;
	char* url;
	int nbEtu = classe.nbEtu;
	url = malloc(MAX_CHAR * sizeof(char));//malloc de l'url
 
	//Génération de l'url
	sprintf(url, "%s%s.%s.%s.bin", URL_CLASSES ,nomSection, nomAnnee, classe.nomClasse);
	if(DEBUG)
		printf("\n\nURL : %s\n\n", url);
 
	//Ouverture du fichier
	fichier = fopen(url, "wb+");
	if(fichier == NULL)
    {
		printf("Erreur lors de l'ouverture de %s\n", url);
		perror ("The following error occurred");
		printf( "Value of errno: %d\n", errno );
		exit(0);
	}
 
	/*Enregistrement dans le fichier*/
	else
    {
		fwrite(&classe, sizeof(T_Classe), 1, fichier);
		fwrite(classe.eleves, nbEtu * sizeof(T_Etudiant), 1, fichier);
		fclose(fichier);
		printf("Fichier correctement enregistre !\n\n");
		system("PAUSE");
	}
}
Et lorsque que je les charge :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
T_Classe chargerClasse(char *url, char* nomClasse){
	FILE *fichier = NULL;
	T_Classe returnClasse;
	T_Classe *returnClasseVide = NULL;
	int nbEtu;
 
	fichier = fopen(url, "rb");
	if(fichier == NULL)
    {
		returnClasseVide = (T_Classe*) malloc(sizeof(T_Classe));
 
		//Si le fichier de chargement de classe n'existe pas
		//On crée une classe vide avec son nom et le nombre d'étudiant à 0.
		strcpy(returnClasseVide->nomClasse, nomClasse);
		returnClasseVide->nbEtu = 0;
 
		printf("La classe \"%s\" est vide, vous devrez la remplir.", nomClasse);
		return *returnClasseVide;
	}
 
	else
    {   //On lit d'abord la classe, comme cela on sait le nombre d'étudiants à mallocer.
        returnClasse.eleves = malloc(INCREMENTALLOC * sizeof(T_Etudiant));
 
		fread(&returnClasse, sizeof(T_Classe), 1, fichier);
		fread(returnClasse.eleves, returnClasse.nbEtu * sizeof(T_Etudiant), 1, fichier);
		returnClasse.eleves = realloc(returnClasse.eleves, returnClasse.nbEtu * sizeof(T_Etudiant));
		printf("Classe %s correctement chargee : ", returnClasse.nomClasse);
		printf("il y a %d etudiants", returnClasse.nbEtu);
		return returnClasse;
	}
}
Le compilateur m'indique un problème lors du chargement, à la ligne ou je fais le realloc.
Je ne comprends pas pourquoi ...

Le code me semble pourtant plutôt correct ?

Quelqu'un pourrait-il m'aider ?

D'avance, merci à ceux qui prendront le temps de lire mon message.

Une excellente journée,

Mornor.