IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Passage d'un pointeur en argument mais pas de modification ! [Non suivi]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14
    Par défaut Passage d'un pointeur en argument mais pas de modification !
    salut,

    tout d'abord, je voudrais remercier tous les membres de ce forum qui m'ont aidé ces derniers jours et m'aideront. Je serais bientôt un membre actif pour aider les autres aussi.

    voilà mon code:
    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
    void generation_voisins(int nb_param_DS,
    						struct parametre_space *design_space,
    						struct configuration *c,
    						struct configuration *voisins,
    						int debut)
    {
    	int compt_gv;
    	int position;
    	//string nouvelle_valeur;
    	for(compt_gv=0;compt_gv<nb_param_DS;compt_gv++)
    	{
    		position=position_dune_valeur_de_DS(design_space,*c,compt_gv);
    		//voisin de droite
    		//inutile,strcpy(nouvelle_valeur,design_space[compt_gv].valeur[(position+1)%(design_space[compt_gv].nb_valeurs)]);
    		appliquer_nom_valeur_struct(design_space[compt_gv].nom_param,c,compt_gv,design_space,position);
    		voisins[debut+2*compt_gv]=*c;//, sizeof (configuration));
    		//voisin de gauche
    		appliquer_nom_valeur_struct(design_space[compt_gv].nom_param,c,compt_gv,design_space,position);
    		voisins[debut+2*compt_gv]= *c;//, sizeof (c));
    	}
    	printf("voisins interieur:%d\n",voisins[debut+compt_gv].issue__width);
    	return voisins;
    }
    ce printf("voisins interieur:%d\n",voisins[debut+compt_gv].issue__width); m'a assuré que les modifs ont été appliquées, les voisins sont bien générés

    voilà le code dans la fonction principale:
    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
    void recherche_locale(int nb_param_DS,
    						struct parametre_space *design_space,
    						int nb_param_constants,
    						struct parametre_constant *ensemble_parametres_constants,
    						struct configuration *c)
    {
    ...
    		for(i=0;i<nbre_pareto;i++)
    		{
    			int debut=i*nb_param_DS;
    			generation_voisins(nb_param_DS,
    								design_space,
    								&pareto[i],
    								voisins,
    								debut);
    		}
    printf("voisins%d\n",voisins[4].fetch__ifqsize);
    ce printf("voisins%d\n",voisins[4].fetch__ifqsize); me donne qui la portée de mon paramètre voisins a été local, la modif ne sais pas appliquée.

    merci

  2. #2
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    Salut

    1) Soignes la présentation de ton code, l'indentation est pitoyable
    2) Peut-on avoir du code compilable ? Pcq avec ce code, je ne peux rien faire

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14
    Par défaut
    Citation Envoyé par Freed0
    Salut

    1) Soignes la présentation de ton code, l'indentation est pitoyable
    2) Peut-on avoir du code compilable ? Pcq avec ce code, je ne peux rien faire
    malheureusement, c une d'une vingtaine de fonctions. c assez grand comme code (5000lignes). pour un code compilable , il me faut 1000lignes au moins sur 5ou6 fichiers .c avec leur entête

    si vous pouvez juste vérifier la cohérence des pointeurs de "voisins"

  4. #4
    Membre émérite
    Avatar de Freed0
    Profil pro
    Étudiant
    Inscrit en
    Mars 2005
    Messages
    635
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 635
    Par défaut
    OK, mais tu pourrais qd même soigner la présentation de ton code...

    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
    void recherche_locale(int nb_param_DS,
    						struct parametre_space *design_space,
    						int nb_param_constants,
    						struct parametre_constant *ensemble_parametres_constants,
    						struct configuration *c)
    {
    ...
    		for(i=0;i<nbre_pareto;i++)
    		{
                            /* J'espère que ton compilateur supporte le C99 ! */
    			int debut=i*nb_param_DS;
                            /* D'où viennent ces paramètres ? aucune déclaration de
                             * pareto, voisins, ... Pas très sérieux :/
                             */
    			generation_voisins(nb_param_DS,
    								design_space,
    								&pareto[i],
    								voisins,
    								debut);
    		}
    printf("voisins%d\n",voisins[4].fetch__ifqsize);
    Bref on ne peut pas t'aider, tu nous donnes du code comme si on connaissait ce qui se cache derrière... mais ce n'est pas le cas

    A toi de fournir l'effort pour que l'on puisse t'aider

  5. #5
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Il y a au moins un problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void generation_voisins(int nb_param_DS,
    						struct parametre_space *design_space,
    						struct configuration *c,
    						struct configuration *voisins,
    						int debut)
    {
    	...
    	printf("voisins interieur:%d\n",voisins[debut+compt_gv].issue__width);
    	return voisins;
    }

  6. #6
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14
    Par défaut
    j'ai corrigé le return,

    je reformule la question:

    voici mon code:
    void generation_voisins doit prendre "struct configuration *c", appliquer un changement à un de ces attributs et enregistrer ce changement dans "struct configuration *voisins".
    Le changement s'opère bien (je l'ai testé), il s'applique aussi à "struct configuration *voisins" dans la fonction.
    Mais j'ai besoin de "voisins" à l'exérieur dans le programme principal, mais le problème c'est que ce changement ne s'opère pas d"une façon globale.

    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
    void generation_voisins(int nb_param_DS,
    						struct parametre_space *design_space,
    						struct configuration *c,
    						struct configuration *voisins,
    						int debut)
    {
    	int compt_gv;
    	int position;
    	//string nouvelle_valeur;
    	for(compt_gv=0;compt_gv<nb_param_DS;compt_gv++)
    	{
    		position=position_dune_valeur_de_DS(design_space,*c,compt_gv);
    		//voisin de droite
    appliquer_nom_valeur_struct(design_space[compt_gv].nom_param,c,compt_gv,design_space,position);
    		voisins[debut+2*compt_gv]=*c;
    		//voisin de gauche
    appliquer_nom_valeur_struct(design_space[compt_gv].nom_param,c,compt_gv,design_space,position);
    		voisins[debut+2*compt_gv]= *c;
    	}
    	printf("voisins interieur:%d\n",voisins[debut+compt_gv].issue__width);
     
    }
    ce printf("voisins interieur:%d\n",voisins[debut+compt_gv].issue__width); m'a assuré que les modifs ont été appliquées, les voisins sont bien générés

    voilà le code dans la fonction principale:
    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
    void recherche_locale(int nb_param_DS,
    						struct parametre_space *design_space,
    						int nb_param_constants,
    						struct parametre_constant *ensemble_parametres_constants,
    						struct configuration *c)
    {
    ...
    		for(i=0;i<nbre_pareto;i++)
    		{
    			int debut=i*nb_param_DS;
    			generation_voisins(nb_param_DS,
    								design_space,
    								&pareto[i],
    								voisins,
    								debut);
    		}
    printf("voisins%d\n",voisins[4].fetch__ifqsize);
    ce printf("voisins%d\n",voisins[4].fetch__ifqsize); me donne des 0, la portée de mon paramètre voisins a été donc local, la modification ne s'est pas appliquée.

    C'est un problème de passage par paramètre.

    les autres fonctions sont opérationnelles et ne présentes aucun problème
    merci
    merci

  7. #7
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Je ne vois pas l'utilité des lignes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //voisin de droite
    appliquer_nom_valeur_struct(design_space[compt_gv].nom_param,c,compt_gv,design_space,position);
    		voisins[debut+2*compt_gv]=*c;
    //voisin de gauche
    appliquer_nom_valeur_struct(design_space[compt_gv].nom_param,c,compt_gv,design_space,position);
    		voisins[debut+2*compt_gv]= *c;
    La seconde affectation écrase la première.

    Ensuite, quelle est la déclaration de voisins dans la fonction recherche_locale()?

  8. #8
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14
    Par défaut
    Citation Envoyé par stephl
    Je ne vois pas l'utilité des lignes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //voisin de droite
    appliquer_nom_valeur_struct(design_space[compt_gv].nom_param,c,compt_gv,design_space,position);
    		voisins[debut+2*compt_gv]=*c;
    //voisin de gauche
    appliquer_nom_valeur_struct(design_space[compt_gv].nom_param,c,compt_gv,design_space,position);
    		voisins[debut+2*compt_gv+1]= *c;
    La seconde affectation écrase la première.

    Ensuite, quelle est la déclaration de voisins dans la fonction recherche_locale()?
    j'ai corrigé ce détail, c'est en fait "voisins[debut+2*compt_gv+1]"

    la déclaration de voisins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	struct configuration *voisins;
    	voisins =(struct configuration*) malloc (sizeof(configuration)*2*nb_param_DS*nbre_pareto);
    	int nbre_voisins=0;

  9. #9
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Il n'est pas possible de répondre à ta question si on ne connait même pas les paramètres de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void recherche_locale(int nb_param_DS,
    			struct parametre_space *design_space,
    			int nb_param_constants,
    			struct parametre_constant  ensemble_parametres_constants,
    			struct configuration *c)
    {
    ...
       for(i=0;i<nbre_pareto;i++)
       {
          int debut=i*nb_param_DS;
          generation_voisins(nb_param_DS,	design_space,&pareto[i],voisins,debut);
    .....
    Qu'est ce que pareto , voisins dans ce segment de code ?

  10. #10
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14
    Par défaut
    Citation Envoyé par diogene
    Il n'est pas possible de répondre à ta question si on ne connait même pas les paramètres de l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void recherche_locale(int nb_param_DS,
    			struct parametre_space *design_space,
    			int nb_param_constants,
    			struct parametre_constant  ensemble_parametres_constants,
    			struct configuration *c)
    {
    ...
       for(i=0;i<nbre_pareto;i++)
       {
          int debut=i*nb_param_DS;
          generation_voisins(nb_param_DS,	design_space,&pareto[i],voisins,debut);
    .....
    Qu'est ce que pareto , voisins dans ce segment de code ?
    voisins et pareto:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    struct configuration *voisins;
    	voisins =(struct configuration*) malloc (sizeof(configuration)*2*nb_param_DS*nbre_pareto);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	struct configuration *pareto;
    	pareto =(struct configuration*) malloc (sizeof(configuration)*2*nb_param_DS);

  11. #11
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Il y a au moins ce petit mélange d'indices dans recherche_locale():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct configuration *pareto;
    pareto =(struct configuration*) malloc (sizeof(configuration)*2*nb_param_DS);
    for(i=0;i<nbre_pareto;i++)
     {
     ...
     generation_voisins(nb_param_DS,	design_space,&pareto[i],voisins,debut);
     ...
     }

Discussions similaires

  1. Réponses: 10
    Dernier message: 03/04/2009, 13h09
  2. Réponses: 2
    Dernier message: 02/09/2008, 11h37
  3. Réponses: 2
    Dernier message: 24/07/2007, 20h16
  4. passage de pointeur en arguments
    Par abelolive dans le forum C
    Réponses: 13
    Dernier message: 06/07/2006, 20h45
  5. Chaines et pointeurs mais pas "const"
    Par hpfx dans le forum C
    Réponses: 9
    Dernier message: 05/10/2003, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo