Passage de structure en parametre fonction : Pointeur
Bonjour a tous,
J'ai cette semaine un petit probleme sur le passage d'une structure en parametre de fonction. Je m'explique clairement :
Voici ma structure (une structure de graphe) :
Code:
1 2 3 4
| typedef struct TypGraphe2 {
int nbMaxSommets;
TypVoisins** listesAdjacences;
} TypGraphe; |
Voici maintenant mon code ou j'essaye de la passer en parametre :
Code:
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 26 27 28
| int main(void) {
TypGraphe* g = NULL; //initialisation du graphe
int choix = 0;
while (1) {
entree(&choix); //recuperation saisie utilisateur
if(choix == 0) { return 0; } //quitter si choix == 0
switch(choix){
case 2 :
lectureFichier(g); // passage du graphe en parametre
break;
...//fonctions intermédiaires
case 7 :
affichage(g);
break;
case 0 :
quitter(g);
break;
default:
print("Saisie non valide");
break;
}
}
} |
Et voici le code de la fonction lectureFichier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| void lectureFichier(TypGraphe* g){
if (g == NULL) {
char name[2048];
print("Chemin du fichier: ");
printf("->");
lectureChemin(name, 2048); //name est le chemin saisie
if (name != NULL)
g = lecture(name); // lecture du graphe (retourne TypGraphe*)
else
return 0;
if (g == NULL)
print("Echec de lecture\n");
else
print("Lecture finit");
}
else
print("Le graphe est deja ouvert");
} |
Donc pour résumer : La fonction main creer un nouveau graphe (c'est la structure) et le passe en parametre dans une fonction qui va le modifier. (J'ai absolument besoins de le passer en parametre dans la fonction et non pas d'en creer un nouveau)
Mon code fonctionne, aucun message d'erreur, mais lorsque je lit un graphe (la fonction lectureFichier), le graphe principale du main n'est pas modifié. Et ainsi si je rappelle cette meme fonction, on va me redemander le chemin du fichier a lire et non pas dire "ton graphe n'est plus null alors il est deja ouvert" (else dans la fonction lectureFichier).
Donc pour conclure je pense que quelque chose a foirer sur les pointeurs.
Merci de votre aide! ;)
Alexis