Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1459 connectés 

  FORUM HardWare.fr
  Programmation
  C

  probleme allocation structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

probleme allocation structure

n°1739761
bluguludu
Posté le 31-05-2008 à 20:56:26  profilanswer
 

Bonjour,
Je crois que j'ai un probleme d'allocation car j'ai cette erreur : Violation d'accès lors de la lecture de l'emplacement ...
 
voila mes deux structures

Code :
  1. typedef struct Employe
  2. {
  3. char date[10];
  4. char nom[30];
  5. int num;
  6. }Employe;
  7. typedef struct Entreprise
  8. {
  9. char nom[30];
  10. struct Employe tabemp[30];
  11. struct Entreprise *suivant;
  12. }Entreprise;


 
Fonction ajout entreprise

Code :
  1. void ajouterEnTete( Entreprise ** pListe, char *n, Employe tab[30] )
  2. {
  3. Entreprise *ancienPremier ;
  4. Entreprise *nouvelEntreprise ;
  5. int i;
  6. nouvelEntreprise = (Entreprise *)malloc( sizeof( Entreprise ) ) ;
  7. if( nouvelEntreprise == NULL ) {
  8.  printf( "erreur d'allocation, arrêt du programme \n" ) ;
  9.  exit(-1) ;
  10. }
  11. strcpy(nouvelEntreprise->nom, n ) ;
  12. for(i=0;i<3;i++){
  13.  nouvelEntreprise->tabemp[i].num = tab[i].num;
  14.  strcpy(nouvelEntreprise->tabemp[i].nom,tab[i].nom);
  15.  strcpy(nouvelEntreprise->tabemp[i].date,tab[i].date);
  16. }
  17. nouvelEntreprise->suivant = NULL ;
  18. if( *pListe == NULL ){
  19.  nouvelEntreprise->suivant = NULL ;
  20. }
  21. else {
  22.  ancienPremier = *pListe ;
  23.  nouvelEntreprise->suivant = ancienPremier ;
  24. }
  25. *pListe = nouvelEntreprise;
  26. }


 
procedure saisir entreprise

Code :
  1. void saisirEntreprise(char *n, Employe tab[30] )
  2. {
  3. int i,numemp;
  4. char nomemp[30],dateemp[10];
  5. printf( "saisir un nom : \n" );
  6. scanf( "%s", n) ;
  7. for(i=0;i<3;i++) {
  8.  printf("rentrez un nom,une date d'inscription(JJ/MM/AAAA) et un numero" );
  9.  scanf("%s %s %d", nomemp,dateemp,&numemp);
  10.  strcpy(tab[i].nom,nomemp);
  11.  strcpy(tab[i].date,dateemp);
  12.  tab[i].num=numemp;
  13. }
  14. }


 
procedure afficher

Code :
  1. void afficherListe( Entreprise *liste )
  2. //--------------------------------------
  3. // affichage de tous les éléments de la liste
  4. {
  5. int i,num;
  6. char nom[30],date[10];
  7. if( liste == NULL ) {
  8.  printf( "affichage impossible, la liste est vide\n" ) ;
  9.  return ;
  10. }
  11. while(liste != NULL ){
  12.  printf( "nom = %s\n", liste->nom) ;
  13.  liste = liste->suivant ;// passage au maillon suivant
  14.  for(i=0;i<3;i++)
  15.   strcpy(nom,liste->tabemp[i].nom);
  16.   strcpy(date,liste->tabemp[i].date);
  17.   num=liste->tabemp[i].num;
  18.   printf( "num = %d \tnom = %s \tdate embauche = %s\n", num, nom, date) ;
  19. }
  20. }


 
et mon main

Code :
  1. void main()
  2. {
  3. Entreprise * maliste = NULL ;
  4. int choix;
  5. char n1[30];
  6. Employe tab1[30];
  7. saisirEntreprise(n1,tab1);
  8. ajouterEnQueue(&maliste,n1,tab1);
  9. afficherListe(maliste);
  10.    
  11. }


 
 
Mon erreur est renvoyée lors de l'execution de la procedure afficherliste au moment où je veux afficher les noms, num et date des employés.
Pourriez vous m'aider svp?

mood
Publicité
Posté le 31-05-2008 à 20:56:26  profilanswer
 

n°1739762
chris672
about:mozilla
Posté le 31-05-2008 à 21:04:11  profilanswer
 

je sais pas si c'est une faute de frappe mais il manque un { dans la ligne 16 de afficherliste


---------------
„Ich kann, weil ich will, was ich muss.“ I. Kant
n°1739769
bluguludu
Posté le 31-05-2008 à 21:58:08  profilanswer
 

c'est exact ! je l'ai corrigé mais ca me mets toujours la même erreur

n°1739782
gilou
Modérateur
Modzilla
Posté le 31-05-2008 à 23:02:18  profilanswer
 

while(liste != NULL ){
 printf( "nom = %s\n", liste->nom) ;
  liste = liste->suivant ;// passage au maillon suivant
 for(i=0;i<3;i++)
  strcpy(nom,liste->tabemp[i].nom);
  strcpy(date,liste->tabemp[i].date);
  num=liste->tabemp[i].num;
  printf( "num = %d \tnom = %s \tdate embauche = %s\n", num, nom, date) ;
}
 
Si liste->suivant est NULL avant la ligne en rouge, tu as comme un pb pour tes strcpy, puisque  liste->tabemp[i] n'a plus grand sens. La place de la ligne en rouge ne serait elle pas apres la boucle for?
 
De plus, ca serait plus efficace par la suite d'écrire

for(i=0;i<3;i++)  printf( "num = %d \tnom = %s \tdate embauche = %s\n",  
                                 liste->tabemp[i].num,  
                                 liste->tabemp[i].nom,  
                                 liste->tabemp[i].date);


 
A+,


Message édité par gilou le 31-05-2008 à 23:09:34

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  probleme allocation structure

 

Sujets relatifs
problème pour faire une présentation de siteProblème connection basse de données
Problème fonction date à devenir fou[MySql] Problème Where %toto%
Problème avec unicodeNetRef annuaire probleme de catégorie
[Mysql] Problème d'import[C#/SQL Server] Problème de modification de la base
[SQL] Problème de compteurProbleme REGEX et PHP
Plus de sujets relatifs à : probleme allocation structure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR