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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager