Allocation dynamique d'un tableau de struct C
TheChicken
-
le père -
le père -
Bonjour,
Je dois programmer un jeu de Yathzee pour un projet de fac en C, et j'ai un petit problème concernant une déclaration dynamique d'un tableau de structure. Je m'explique :
J'ai deux structure (dans deux fichier .C différent)
La première :
(j'ai mis dans un fichier .h correspondant : struct feuilleScore;)
et la deuxieme :
(j'ai mis en début de fichier #include "ProjetB.h" (c'est le .h du fichier .c où j'ai déclaré ma structure feuilleScore))
Le but est de créer le bon nombre de structures Joueur (une pour chaque joueurs de la partie).
j'ai donc fait cette petite fonction :
jusque là pas de problèmes.
Puis j'ai fais une fonction qui permet d'associer a chaque structures Joueurs le nom du joueur
sauf qu'a partir de là ... ça ne marche plus du tout, peut importe le nombre de joueurs , mon nomJoueurs me propose toujours le nom de deux joueurs a mètre, et ensuite windows me dit que mon programme a cessé de fonctionner.
Je pense donc que le problème vient de mon allocation dynamique de ma structure. Dois-je faire la même chose pour la structure FeuilleScore qui est dans la structure Joueur ?
Merci d'avance
Je dois programmer un jeu de Yathzee pour un projet de fac en C, et j'ai un petit problème concernant une déclaration dynamique d'un tableau de structure. Je m'explique :
J'ai deux structure (dans deux fichier .C différent)
La première :
struct FeuilleScore { int partieSuperieure [9]; int partieInferieure [7]; int scoreFinal; };
(j'ai mis dans un fichier .h correspondant : struct feuilleScore;)
et la deuxieme :
(j'ai mis en début de fichier #include "ProjetB.h" (c'est le .h du fichier .c où j'ai déclaré ma structure feuilleScore))
struct Joueur { char* nom; int nblancerRestants; int Des [5]; //les dés du joueur (5 dés) struct FeuilleScore; };
Le but est de créer le bon nombre de structures Joueur (une pour chaque joueurs de la partie).
j'ai donc fait cette petite fonction :
struct Joueur* nombreJoueurs(void){ int nombreJoueurs; printf("Combien de joueurs vont participer a la partie ? (1/2/3/...)"); scanf("%d",&nombreJoueurs); struct Joueur* tab; tab = malloc(sizeof(tab) * nombreJoueurs); return tab; }
jusque là pas de problèmes.
Puis j'ai fais une fonction qui permet d'associer a chaque structures Joueurs le nom du joueur
void nomJoueurs (struct Joueur * tab) { int i = 0; for(i;i<sizeof(tab);i++){ printf("Nom du joueur %d ? ",i+1); scanf("%s",tab[i].nom); } }
sauf qu'a partir de là ... ça ne marche plus du tout, peut importe le nombre de joueurs , mon nomJoueurs me propose toujours le nom de deux joueurs a mètre, et ensuite windows me dit que mon programme a cessé de fonctionner.
Je pense donc que le problème vient de mon allocation dynamique de ma structure. Dois-je faire la même chose pour la structure FeuilleScore qui est dans la structure Joueur ?
Merci d'avance
A voir également:
- Allocation dynamique tableau de structure c
- Tableau croisé dynamique - Guide
- Tableau word - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Impossible d'afficher le rapport de tableau croisé dynamique sur un rapport existant ✓ - Forum Excel
- Tableau ascii - Guide
5 réponses
Bonjour
Si tu veux allouer une structure par joueur, il faut te baser sur la taille de la structure, pas celle du pointeur !
tab = malloc(sizeof(tab) * nombreJoueurs); à remplacer par
tab = malloc(sizeof(struct Joueur) * nombreJoueurs);
Pour ta boucle sur les joueurs, ton for(i;i<sizeof(tab);i++) ne risque pas de fonctionner.sizeof(tab), c'est la taille de la variable tab en octets, qi n'a aucun rapport avec le nombre de joueurs. Il faut rendre la globale la variable nombreJoueurs et faire for(i;i<nombreJoueurs;i++)
Si tu veux allouer une structure par joueur, il faut te baser sur la taille de la structure, pas celle du pointeur !
tab = malloc(sizeof(tab) * nombreJoueurs); à remplacer par
tab = malloc(sizeof(struct Joueur) * nombreJoueurs);
Pour ta boucle sur les joueurs, ton for(i;i<sizeof(tab);i++) ne risque pas de fonctionner.sizeof(tab), c'est la taille de la variable tab en octets, qi n'a aucun rapport avec le nombre de joueurs. Il faut rendre la globale la variable nombreJoueurs et faire for(i;i<nombreJoueurs;i++)
Pour mon info (je ne suis pas spécialiste en C) : dans la déclaration de la struct Joueur, il ne manquerait pas un nom pour le dernier champ struct FeuilleScore ? Car je ne vois pas comment y accéder