Probleme de pointeur

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

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    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. Contributeur
      +1, resultY n'est pas initialisé, il est donc normal que sa valeur soit aléatoire
  2. Contributeur
    es tu sur d'avoir initialisé le message?
    peux t on voir qq bouts de code ?
    1. Modérateur
      Salut,

      Affiche ta structure ainsi que l'affectation de champ result
      1. 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);