Liste chainé
api08
Messages postés
41
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
je fais un programme en langage c qui comporte une liste doublement chainé et 2 structures:
typedef struct _Dliste {
struct _Dliste *next;
struct _Dliste *prev;
void * info;
}Dliste;
typedef struct {
char nom_pers[6];
int age;
}personne;
typedef struct {
char nom_entreprise[6];
Dliste* liste_personne;
}entreprise;
l'ensemble d'entreprise est une dliste d'entreprise.
je n'arrive pas à ajouter une entreprise à la dliste entrepise, je ne sais pas comment affecter les valeurs dans dliste personne car le programme n'accepte pas
"e->liste_personne->nom_pers" si vous pouvez m'aider .
merci d'avance
je fais un programme en langage c qui comporte une liste doublement chainé et 2 structures:
typedef struct _Dliste {
struct _Dliste *next;
struct _Dliste *prev;
void * info;
}Dliste;
typedef struct {
char nom_pers[6];
int age;
}personne;
typedef struct {
char nom_entreprise[6];
Dliste* liste_personne;
}entreprise;
l'ensemble d'entreprise est une dliste d'entreprise.
je n'arrive pas à ajouter une entreprise à la dliste entrepise, je ne sais pas comment affecter les valeurs dans dliste personne car le programme n'accepte pas
"e->liste_personne->nom_pers" si vous pouvez m'aider .
merci d'avance
6 réponses
-
Je pense qu'il te faut une étoile dans tes typedef :
typedef struct nomStruct { ... } *Type; -
ça fonctionne pas, j'ai essayé de faire un transtypage:
personne*sp;
sp=(personne *)e->liste_personne->info;
mais chauqe fois que j'éxecute le programme affiche ça:
"...Access violation reading location..." -
Voici comment bien commencer (prends la fonction initialiser comme exemple) :
#include "stdlib.h" #include "string.h" ////////////////////////////// struct strDListe; typedef struct strDListe { strDListe* next; strDListe* prev; void* info; } *DListe; #define szDListe sizeof(struct strDListe) ////////////////////////////// typedef struct strPersonne { char nom_pers[6]; int age; } *Personne; #define szPersonne sizeof(struct strPersonne) ////////////////////////////// typedef struct strEntreprise { char nom_entreprise[6]; DListe liste_personne; } *Entreprise; #define szEntreprise sizeof(struct strEntreprise) ////////////////////////////// void initialiser(Entreprise &entreprise, const char* nomEntreprise) { entreprise = (Entreprise) malloc(szEntreprise); // allocation mémoire strcpy(entreprise->nom_entreprise, nomEntreprise); entreprise->liste_personne = NULL; } ////////////////////////////// int main() { return 0; } -
merci kx pour votre réponse
lorsque j'éxecute mon prgramme ce message s'affiche :
Unhandled exception at 0x01291c96 in projet.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.
au niveau de cette instruction:
e->liste_personne=e->liste_personne->next; -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Tu n'as probablement pas initialisé la liste en mémoire !
Il faut faire l'allocation dynamique, tu peux par exemple surcharger initialiser
Ce code marche chez moi :
int main() { Personne p; initialiser(p,"Jeff",32); Entreprise e; initialiser(e,"CCM"); initialiser(e->liste_personne,p,NULL,NULL); e->liste_personne=e->liste_personne->next; return 0; }
Remarque : de même qu'on alloue la mémoire, il faut penser à la désallouer quand on ne s'en sert plus. -
La limite à 6 caractères pour nom_pers et nom_entreprise est très restrictive, entre 10 et 20 ce serait mieux.