Struct ?

tomalille Messages postés 52 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 juin 2007 - 1 févr. 2006 à 16:13
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 - 1 févr. 2006 à 19:50
Bonjour,

j'ai un petit pb avec mes structs. je vous explique: je definis un
struct en globale pour l'utiliser dans une procedure qui lit des
donnees a partir d'un fichier.

Dans ce struct j'ai un tableau d'un autre struct dont la capacite est defini automatiquement.

Voici ce que j'ai fait:

struct NOEUDS{

int numNoeuds;

int coordX;

int coordY;

int nbInterfaces;

int coutSlots;

int nbTypes;

int *interfaces;

};



struct INTERFACENOEUD{

int nbCanaux;

int prix;

};



void lectureNoeuds(struct NOEUDS *noeuds,struct INTERFACENOEUD *interfaces)

{



int i;

tempNoeuds[i]=malloc(sizeof(int)*4);



for(i=0;i<nbNoeuds;i++)

{

fscanf(fichierEntree,"%d",&noeuds[i].numNoeuds);

fscanf(fichierEntree,"%d",&noeuds[i].coordX);

fscanf(fichierEntree,"%d",&noeuds[i].coordY);

fscanf(fichierEntree,"%d",&noeuds[i].nbInterfaces);

fscanf(fichierEntree,"%d",&noeuds[i].coutSlots);

fscanf(fichierEntree,"%d",&noeuds[i].nbTypes);



interfaces[i] = malloc(sizeof(struct INTERFACENOEUD) * noeuds[i].nbTypes);

for(j<0;j<noeuds[i].nbTypes;j++)

{

fscanf(fichierEntree,"%d",&interfaces[i][j].nbCanaux);

fscanf(fichierEntree,"%d",&interfaces[i][j].prix);

}

}



}

J'ai alors une erreur a la compilation l'allocation de la memoire
A voir également:

7 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
1 févr. 2006 à 16:38
tempNoeuds[i] = (NOEUDS *) malloc(sizeof(int)*4);

Shell
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
1 févr. 2006 à 16:41
Oula j'ai zappé un truc :

tempNoeuds[i] = (NOEUDS *) malloc(sizeof(NOEUDS));

Shell
0
tomalille Messages postés 52 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 juin 2007
1 févr. 2006 à 16:59
Bonjour et Merci,

j'ai oublie d'enlever cette ligne dans mon copier coller qui etait en commentaire a l'origine.

Mon erreur est au niveau de l'allocation de memoire dans la boucle
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
1 févr. 2006 à 17:59
Le problème est dans interface[i], l'opérateur [] fait que tu déréférences un pointeur, donc interface[i] n'est plus une adresse mais de type struct INTERFACENOEUD , réalises ceci à la place.

interfaces+i = (struct INTERFACENOEUD *)malloc(sizeof(struct INTERFACENOEUD) * noeuds[i].nbTypes);

Bonne chance.
Bouba
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rclsilver02 Messages postés 131 Date d'inscription mercredi 19 mars 2003 Statut Membre Dernière intervention 10 février 2012
1 févr. 2006 à 18:23
je vois pas la déclaration de tempNoeuds ?! Bigleu ou j'ai raison ? :o
0
tomalille Messages postés 52 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 5 juin 2007
1 févr. 2006 à 19:05
salut bouba et merci pour ta réponse,
je viens d'essayer ta solution et elle ne fonctionne pas j'ai l'erreur suivante:
invalid lvalue in assignment

Est-ce que la déclaration des structs est bonnes? :
struct NOEUDS{
int numNoeuds;
int coordX;
int coordY;
int nbInterfaces;
int coutSlots;
int nbTypes;
int *interfaces;
};

struct INTERFACENOEUD{
int nbCanaux;
int prix;
};

void lectureNoeuds(struct NOEUDS *noeuds,struct INTERFACENOEUD *interfaces)
{

int i;

for(i=0;i<nbNoeuds;i++)
{
fscanf(fichierEntree,"%d",&noeuds[i].numNoeuds);
fscanf(fichierEntree,"%d",&noeuds[i].coordX);
fscanf(fichierEntree,"%d",&noeuds[i].coordY);
fscanf(fichierEntree,"%d",&noeuds[i].nbInterfaces);
fscanf(fichierEntree,"%d",&noeuds[i].coutSlots);
fscanf(fichierEntree,"%d",&noeuds[i].nbTypes);

interfaces+i = (struct INTERFACENOEUD *)malloc(sizeof(struct INTERFACENOEUD) * noeuds[i].nbTypes);

for(j<0;j<noeuds[i].nbTypes;j++)
{
fscanf(fichierEntree,"%d",&interfaces[i][j].nbCanaux);
fscanf(fichierEntree,"%d",&interfaces[i][j].prix);
}
}

}
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
1 févr. 2006 à 19:50
Oui, il faut passer par une variable temporaire, une lvalue <=> une seule "variable", donc ne peut pas être la somme de deux "variables".
void lectureNoeuds(struct NOEUDS *noeuds,struct INTERFACENOEUD *interfaces)
{

int i;
struct INTERFACENOEUD *tmp;
...
...
tmp = interfaces+i;
tmp = (struct INTERFACENOEUD *)malloc(sizeof(struct INTERFACENOEUD) * noeuds[i].nbTypes);
interfaces = tmp;
...
...
0
Rejoignez-nous