Probleme de pointeur

Fermé
encoremoi - 1 sept. 2009 à 11:12
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 1 sept. 2009 à 11:39
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

4 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
1 sept. 2009 à 11:33
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
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
1 sept. 2009 à 11:39
+1, resultY n'est pas initialisé, il est donc normal que sa valeur soit aléatoire
0
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 192
1 sept. 2009 à 11:20
es tu sur d'avoir initialisé le message?
peux t on voir qq bouts de code ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
1 sept. 2009 à 11:20
Salut,

Affiche ta structure ainsi que l'affectation de champ result
0
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