Problème de malloc sur structures.
Bonjour à tous,
Voici quelques jours que j'essaye de faire un programme (assez classique) utilisant des structures, des tableaux et donc des mallocs.
Voici mes structures :
Code:
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 33 34 35 36
| typedef struct{
char rue[MAX_CHAR];
char ville[MAX_CHAR];
int num;
int cp;
}T_Adresse;
typedef struct
{
char matricule[MAX_CHAR];
char nom[MAX_CHAR];
char prenom[MAX_CHAR];
double tabCotes[5];
double moyennePourcentage;
T_Adresse adr;
}T_Etudiant;
typedef struct{
char nomCours[MAX_CHAR];
int ponderation;
}T_Cours;
typedef struct{
int nbEtu;
T_Etudiant * classe;
}T_Classe;
// Definition d'une annee/section (1TI)
typedef struct{
char nomAnneeSection[MAX_CHAR];
int nbClasses;
char *nomClasse; // Tableau contenant le nom des cours. (1TM1)
int nbCoursParEtudiant;
T_Cours *tabCours;
T_Classe *tabClasse;
}T_AnneeSection; |
Je créer un tableau de T_AnneeSection comme ceci :
Code:
T_AnneeSection * tabAnneeSection = NULL; // Ecole (tabAnnneeSection)
Que je passe à la fonction afficherMenuGlobal :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| void afficherMenuGlobal(T_AnneeSection * tab)
{
tab = malloc(INCREMENTALLOC * sizeof(T_AnneeSection));
int choix = 0, nbrAnneeSection = 0, i = 0;
printf("1. Charger le tableau d'annee/section.\n");
printf("2. Creer une annee/section\n\n");
scanf("%d", &choix);
if(choix == 2)
{
for(i = 0 ; i < 2 ; i++)
demanderInfo(tab);
}
} |
Je veux donc créer 1 anneeSection dans le tableau tab.
Grâce à la méthode suivante :
Code:
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 33 34 35 36 37
|
/*Permet de créer 1 anneeSection */
void demanderInfo(T_AnneeSection * anneeSection)
{
int i = 0;
printf("Nom (ex : 1TI) : ");
fflush(stdin);
gets(anneeSection->nomAnneeSection);
printf("Nombre de Classes : ");
fflush(stdin);
gets(anneeSection->nbClasses);
anneeSection->tabClasse = (T_Classe *)malloc(anneeSection->nbClasses * sizeof(T_Classe));
for(i = 0 ; i < anneeSection->nbClasses ; i++)
{
printf("\t Nom de la classe %d (ex : 1TM1) : ", i+1);
fflush(stdin);
gets(anneeSection->nomClasse[i]);
}
printf("Nombre de cours par etudiant : ");
fflush(stdin);
scanf("%d", anneeSection->nbCoursParEtudiant);
anneeSection->tabCours = malloc(anneeSection->nbCoursParEtudiant * sizeof(T_Cours));
for(i = 0 ; i < anneeSection->nbCoursParEtudiant ; i++)
{
printf("\t Nom du cours %d : ", i+1);
gets(anneeSection->tabCours[i].nomCours);
printf("\t Ponderation de ce cours : ");
scanf("%d", anneeSection->tabCours[i].ponderation);
}
} |
Mais il y'a une erreur d’exécution, dès que je demande le nom des classes dans la première boucle for de demanderInfo().
De plus, j'envoie tab dans demanderInfo, et non tab[i], car j'ai une erreur de compilation ... Pourquoi ?
Désolé pour ce long énoncé, mais je ne voyais pas comment expliquer autrement ...
Un énorme merci à ceux qui prendront la peine d'y jeter un coup d'oeil.
Cordialement,
Mornor.