Dereferencing error en utilisant des messages - C - Programmation
Marsh Posté le 18-05-2005 à 10:34:33
brisssou a écrit : Voilà le code incriminé :
|
Heureusement, sinon tu aurais un superbe plantage...
Marsh Posté le 18-05-2005 à 11:59:17
en fait, la structure est définie par le système, c'est dans type.h, ça marche avec les messages...
et le pointeur n'est pas initialisé par moi.
est-ce qu'un (*msgp).mtext ne serait pas ma solution ?
je testerai ce soir...
Marsh Posté le 18-05-2005 à 12:57:42
Ta structure est déclarée mais pas définie, tu peux donc en créer des pointeurs mais tu ne peux pas les déréférencer (*msgp et msgp-> sont interdit).
Solution : la définir avant de l'utiliser, par exemple :
#define MSGSZ 128 |
Marsh Posté le 18-05-2005 à 13:29:20
mais pourtant, dans le man de msgsnd et msgrcv :
Citation : |
alors en fait, ça voudrait dire que la structure n'est qu'un exemple... en tout cas, c'est ce que je viend de comprendre en lisant la VO du man... en françqis, c'était pas clair...
alors, je doit comprendre quoi ? il faut que je déclare la strut, comme tu me le dis ?
merci en tout cas, à tous.
Marsh Posté le 18-05-2005 à 13:39:31
Oui il faut que tu déclares toi même la struct, ce qui te permet au passage de définir la taille que tu préfères pour mtext.
PS : TAILLE_MAX_MESS devrait être égale à MSGSZ en prenant mon exemple.
Marsh Posté le 18-05-2005 à 13:43:29
brisssou a écrit : en fait, la structure est définie par le système, c'est dans type.h, ça marche avec les messages... |
Tout ce que j'ai trouvé, c'est une définition 'générique'
struct msgbuf; |
dans usr/include/linux/syscalls.h. C'est donc bien à l'utilisateur de préciser ce qu'il veux. Vu du système, c'est comme un pointeur anonyme.
Citation : et le pointeur n'est pas initialisé par moi. |
|
En tout cas, il n'est pas initialisé par ce code...
|
Marsh Posté le 18-05-2005 à 13:47:16
char mtext[1];
->
char mtext[TAILLE_MAX_MESS];
Marsh Posté le 18-05-2005 à 13:51:29
Tarabiscote a écrit : char mtext[1]; |
Ok, étant donné que c'est l'utilisateur qui définit le type complet, on peut faire ça. Je corrige. Mais il subsiste le problème de l'initialisation.
Maintenant que le type est complet, on peut faire
struct msgbuf msgp; |
et passer l'adresse...
Marsh Posté le 18-05-2005 à 23:19:33
merci beaucoup, tout a fonctionné !
il manquait simplement l'initialisation de la structure, comme tu le disait, et j'ai eu un soucis tordu : ça ne fonctionne qu'en root, sinon, la file ne se crée pas.
merci beaucoup à tout le monde !
Marsh Posté le 18-05-2005 à 01:07:46
Voilà le code incriminé :
à la compilation j'obtiens un splendide :
Si vous en doutez encore, je suis pas une flèche en C, donc si c'est con, allez y, lachez vous.
Je ne comprend pas pourquoi ne n'arrive pas à récupérer les champs de msgp...
Une idée ?
---------------
HFR - Mes sujets pour Chrome - Firefox - vérifie les nouveaux posts des topics suivis/favoris