Struct ?

Signaler
Messages postés
52
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
5 juin 2007
-
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
-
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

7 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
tempNoeuds[i] = (NOEUDS *) malloc(sizeof(int)*4);

Shell
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Oula j'ai zappé un truc :

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

Shell
Messages postés
52
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
5 juin 2007

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
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
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
Messages postés
131
Date d'inscription
mercredi 19 mars 2003
Statut
Membre
Dernière intervention
10 février 2012

je vois pas la déclaration de tempNoeuds ?! Bigleu ou j'ai raison ? :o
Messages postés
52
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
5 juin 2007

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);
}
}

}
Messages postés
518
Date d'inscription
dimanche 2 décembre 2001
Statut
Membre
Dernière intervention
10 novembre 2007
3
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;
...
...