Probleme de pointeur
encoremoi
-
Nabla's Messages postés 18201 Date d'inscription Statut Contributeur Dernière intervention -
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
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
-
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 -
es tu sur d'avoir initialisé le message?
peux t on voir qq bouts de code ? -
Salut,
Affiche ta structure ainsi que l'affectation de champ result -
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);