Probleme de pointeur

encoremoi -  
Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai un probleme de pointeur :

j'utilise une file de message pour communiquer entre processus, et l'un des programme veut afficher une variable stockée dans la structure MESSAGE (qui me sert pour la file) à l'emplacement resultat (qui est un int)

au début du programme j'ai déclaré MESSAGE mes;
et qd je veux afficher je fait: printf("le resultat est %d\n",mes.result);

et là a l'éxécution ca m'affiche n'importe quoi (un enorme nombre negatif, toujours different)

Comment faire pour afficher ? (passer par un pointeur m'embete un peu , car il faut que je change toutes les autres parties du programme

Merci
Configuration: Windows Vista
Firefox 3.0.13

4 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    printf("la valeur du resultat est: %d\n",mes.resultY);

    Je ne vois pas où tu affecte des valeurs pour les 3 derniers champs de ta structure mes qui n'est pas un pointeur de structure donc tu dois utiliser mes.champ et pas mes->champ
    1
    1. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
       
      +1, resultY n'est pas initialisé, il est donc normal que sa valeur soit aléatoire
      0
  2. Nabla's Messages postés 18201 Date d'inscription   Statut Contributeur Dernière intervention   3 228
     
    es tu sur d'avoir initialisé le message?
    peux t on voir qq bouts de code ?
    0
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    Affiche ta structure ainsi que l'affectation de champ result
    0
  4. encoremoi
     
    je pense :

    voila le code du programme qui lit:
    typedef struct
    {
    	long type;
    	int a;
    	int b;
    	int y;
    	int resultA;
    	int resultB;
    	int resultY;
    }MESSAGE;
    
    typedef struct
    {
    	int x;
    }SEGMENT;
    
    SEGMENT *pSeg;
    void erreur (char *mes);
    
    int main (void)
    {
             int pidA ,pidB, pidY;
             int cle ,msgid,shmid,ret;
    	 char *argv[2];
             MESSAGE mes;
             
             //Creation de la clef
             cle = ftok("fich",'1');
             if(cle == -1)
                       erreur(" A: pb de creation de la cle");
    
             //Creation de la file
             msgid = msgget(cle,IPC_CREAT|0666);
             if(msgid == -1)
                       erreur(" A: pb de creation de la file");
    
    	 //creation du fils A
             pidA = fork();
             if (pidA == 0)
             {
                      argv[0] = "filsA";
                      argv[1]=NULL;
    		  if((ret= execv ("filsA", argv)) == -1);
                                erreur ("A : pb de creation de la fille A");
             }
    
    	//creation du fils B
             pidB = fork();
             if (pidB == 0)
             {
                      argv[0] = "filsB";
                      argv[1]=NULL;
    		  if((ret= execv ("filsB", argv)) == -1);
                                erreur ("A : pb de creation de la fille B");
             }
    
    
    	//creation du fils Y
             pidY = fork();
             if (pidY == 0)
             {
                      argv[0] = "filsY";
                      argv[1]=NULL;
    		  if((ret= execv ("filsY", argv)) == -1);
                                erreur ("A : pb de creation de la fille Y");
             }
    
    
    	//saisie des coeff
            printf("taper a: ");
            scanf("%d",&mes.a);
    	printf("taper b: ");
            scanf("%d",&mes.b);
    	printf("taper y: ");
            scanf("%d",&mes.y);
    
    
                       mes.type=pidA;
                      ret=msgsnd(msgid,&mes,sizeof(MESSAGE)-sizeof(long),0);
    		  if(ret==-1)
    			erreur("M: pb envoi de mess A");
    		  mes.type=pidB;
    		  ret=msgsnd(msgid,&mes,sizeof(MESSAGE)-sizeof(long),0);
    		  if(ret==-1)
    			erreur("M: pb envoi de mess B");
    		  mes.type=pidY;
    		  ret=msgsnd(msgid,&mes,sizeof(MESSAGE)-sizeof(long),0);
    		  if(ret==-1)
    			erreur("M: pb envoi de mess C");
    
    		  sleep(1);
    		  printf("la valeur du resultat est: %d\n",mes.resultY);
    
    	wait(NULL);
    	wait(NULL);
    	wait(NULL);	
    	return(0);
    }
    
    
    void erreur(char *mes)
    {
             printf("%s\n",mes);
             exit(-1);
    }
    


    et le programme qui écrit le fgait de la facon suivante:

    MESSAGE mes;
    mes->resultY=(mes->resultA)+(mes->resultB)+(mes->y);
    0