Probleme de pointeur
encoremoi
-
Nabla's Messages postés 20731 Statut Contributeur -
Nabla's Messages postés 20731 Statut Contributeur -
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
A voir également:
- Probleme de pointeur
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Le pointeur de mon pc portable ne marche plus - Guide
- Le pointeur de la souris - Guide
- Pointeur souris avec rond de chargement qui clignote sans arrêts ✓ - Forum Windows
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
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
Nabla's
Messages postés
20731
Statut
Contributeur
3 194
+1, resultY n'est pas initialisé, il est donc normal que sa valeur soit aléatoire
je pense :
voila le code du programme qui lit:
et le programme qui écrit le fgait de la facon suivante:
MESSAGE mes;
mes->resultY=(mes->resultA)+(mes->resultB)+(mes->y);
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);