IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Tableau de pointeurs de structures


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 28
    Points : 10
    Points
    10
    Par défaut Tableau de pointeurs de structures
    Bonjour, je n'arrive pas à manipuler un tableau de pointeurs de structures.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct{
    	Skipper *skipper;
    	Bateau *bateau;
    	int iNum;
    } Competiteur;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char * argv[]){
    	Skipper *leSkipper = NULL;
    	Bateau *leBateau = NULL;
    	Competiteur *leCompetiteur = NULL;
     
    	int nbComp = -1;
    	int *pNbComp = &nbComp;
     
    	Competiteur *tabComp=NULL;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void creationCourse(Competiteur **tabCompetiteur, int *pNbComp){
    	if (*pNbComp==-1)
    	{
    		tabCompetiteur = malloc (sizeof(Competiteur));
    		*pNbComp=0;
    		printf("\tLa course a été crée\n");
    	}
    	else 
    	{
    		printf("\tLa course a déjà été crée\n");
    	}
    }
    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
    int ajouterCompetiteur(Competiteur **tabComp, Competiteur *competiteur, Skipper *pSkipper, Bateau *pBateau,int *pNbComp){
     
    	/* declarations */
    	//Competiteur *leCompetiteur=NULL;
    	int iNum = 0;
     
    	/* creation */
     
    	if(*pNbComp < 0){
    		printf("\tVeuillez créer une course\n");
    	}
    	else
    	{
    		ajouterSkipper(&pSkipper);
    		ajouterBateau(&pBateau);
    		creerCompetiteur(&competiteur,&pSkipper,&pBateau,iNum);
    		printf("\t***********************************\n");
    		printf("\t**       Votre competiteur       **\n");
    		printf("\t***********************************\n");
    		ajoutCompTab(tabComp, &competiteur, pNbComp);
    		scanf("%*c");
     
    	}
    	return (0);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void ajoutCompTab(Competiteur **tabCompetiteur, Competiteur **leCompetiteur, int *pNbComp){
     
    	tabCompetiteur[*pNbComp] = *leCompetiteur;
            afficherCompetiteur(tabCompetiteur[*pNbComp]);
    	*pNbComp=*pNbComp+1;
    	printf("%d",*pNbComp);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void afficheCourse(Competiteur **tabComp,int *pNbComp){
    	int i=0;
    	for (i=0; i<(*pNbComp); i++){
    		printf("\t***********************************\n");
    		afficherCompetiteur(tabComp[i]);
    	}
     
    	printf("APPUYER SUR ENTREE POUR CONTINUER\n");
    	scanf("%*c");
    }
    J'ai un menu pour accéder aux fonctions .
    Je créer la course, puis j'ajoute des compétiteurs.
    Ensuite lorsque j'affiche la liste des compétiteurs, seul le premier s affiche puis j'ai un core dump.

    J’espère avoir été assez clair, merci d avance.

  2. #2
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Salut,

    Il n'y a pas la fonction ajouterSkipper.
    Tu développes sous quel éditeur ?
    Si code blocks, envoie ton projet ou ton source.

    Cdt.
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    Je suis sous gedit.

    Enfet les fonctions ajouterSkipper et ajouterBateau fonctionnent car je peut afficher le premier Conpétiteur. Je pense que j 'ai un problème avec mon tableau de Compétiteur.
    On sait jamais voici la fonction ajouterSkipper :

    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
    void ajouterSkipper(Skipper **leSkipper){
     
    	// déclaration
    	char sNom[TAILLE_NOM];
    	char sPrenom[TAILLE_NOM];
    	char sAdresse[TAILLE_ADR];
    	int iAge;
     
    	// affectations
    	printf("\t***********************************\n");
    	printf( "\tEntrer le nom du Skipper: \n\t");
    	fgets(sNom, sizeof(sNom), stdin);
    	printf( "\tEntrer le prénom du Skipper: \n\t");
    	fgets(sPrenom, sizeof(sPrenom), stdin);
    	printf( "\tEntrer l'adresse du Skipper: \n\t");
    	fgets(sAdresse, sizeof(sAdresse),  stdin);
    	printf( "\tEntrer l age du Skipper: \n\t");
    	scanf("%d%*c", &iAge);
     
    	// creation skipper	
    	creerSkipper(leSkipper, sNom, sPrenom, sAdresse, iAge);
    }
    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
    int creerSkipper(Skipper ** skipper, char * sNom, char * sPrenom, char * sAdresse, int iAge){
    	*skipper = malloc(sizeof(Skipper)); // déclaration dynamique du pointeur de la structure skippeur
     
    	if(*skipper == NULL)
    	{
    		perror ("CreerSkipper");
    		return(-1);
    	}
     
    	// affectations
     
    	strcpy((*skipper)->sNom,sNom);
    	strcpy((*skipper)->sPrenom,sPrenom);
    	strcpy((*skipper)->sAdresse,sAdresse);
    	(*skipper)->iAge = iAge;
    	return (0);
     
    	}

  4. #4
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Il manque encore des fonctions, je ne comprends pas comment ça s'articule.
    Tu peux envoyer le .c directement ou le projet en pièce jointe stp ?

    Est ce qu'à partir du menu, tu veux pouvoir ajouter des competiteurs ?
    Parce que je ne vois pas de fonctions de reallocation.
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    merci pour ton aide.
    Voila un lien vers le projet :
    https://docs.google.com/folder/d/0B6...1Ld21UT00/edit

    edit: j'avais mal configuré l accès, c est réglé maintenant.

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void creationCourse(Competiteur **tabCompetiteur, int *pNbComp){
    	if (*pNbComp==-1)
    	{
    		tabCompetiteur = malloc (sizeof(Competiteur));
    ...
    Ceci ne fait que modifier la variable locale tabCompetiteur.
    Il y a incohérence dans le malloc : tabCompetiteur est un Competiteur** et le sizeof se réfère à un Competiteur.
    Probablement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                   *tabCompetiteur = malloc (sizeof(Competiteur));
    Il y a sans doute d'autres problèmes car d'autres parties du code sont bizarres, mais on ne connait pas tout.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 28
    Points : 10
    Points
    10
    Par défaut
    Merci diogene, en effet il doit avoir d autres problèmes. J'ai testé plusieurs manières pour l allocation mémoire mais rien à faire j'ai toujours un core dumped quand je veux accéder aux indices supérieur a 0 du tableaux. Je parviens à afficher que le premier compétiteur de tabComp.

  8. #8
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Points : 460
    Points
    460
    Par défaut
    Je regarde ça ce soir en rentrant du taff.
    Il me demande une autorisation, j'ai fais une demande par mail.
    d***.anony****.*r@gmail.com c'est moi !
    UNE REPONSE UTILE : &|| UN PROBLEME RESOLU :

Discussions similaires

  1. Tableau de pointeurs sur Structure
    Par kenzo75 dans le forum C
    Réponses: 18
    Dernier message: 02/02/2013, 09h24
  2. tableau de pointeur de structure
    Par kayenne77 dans le forum Débuter
    Réponses: 5
    Dernier message: 24/01/2009, 18h18
  3. Tableau de pointeurs de structures
    Par jovds dans le forum C
    Réponses: 2
    Dernier message: 11/11/2007, 21h01
  4. Réponses: 67
    Dernier message: 13/02/2007, 18h08
  5. structure, tableau et pointeur
    Par Phil' dans le forum GTK+ avec C & C++
    Réponses: 16
    Dernier message: 26/05/2006, 17h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo