debutant : pointeur pointé n'a plus acces aux pointé du pointeur
13 réponses
Sébastien
Slt,
je tente de comprendre un trucbizarre avec les ppointeur.
j'ai une fonction qui initialise un pointeur de type usb_dev_handle et do=
nt je
ne peux pas en parcourrir le contenu, alors ue les fonction de la bibliot=
heque
(libusb) le font sans erreur. regarder comme suit.
/*extrait usbi.h*/
struct usb_dev_handle {
int fd;
struct usb_bus *bus;
struct usb_device *device;
int config;
int interface;
int altsetting;
/* Added by RMT so implementations can store other per-open-device dat=
a */
void *impl_info;
};
/*end usbi.h*/
/*extrait usb.h*/
/* Data types */
struct usb_device;
struct usb_bus;
ce qui a mon esprit donne acces aux membres fd et device.
et bien non le compilateur me donne une erreur : "dereferencing pointer to incomplete type"
Tu n'as pas la definition du type. Inclus usbi.h.
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Emmanuel Delahaye
Sébastien wrote on 26/10/04 :
j'ai une fonction qui initialise un pointeur de type usb_dev_handle et dont je ne peux pas en parcourrir le contenu, alors ue les fonction de la bibliotheque (libusb) le font sans erreur. regarder comme suit.
/*extrait usbi.h*/
Le 'i' de 'usbi' signifie probablement 'interne' (n'est pas à la disposition de l'utilisateur). Par contre, il y a fort à parier qu'il existe un 'usb.h' qui, lui, est à la disposition de l'utilisateur.
struct usb_dev_handle { int fd;
struct usb_bus *bus; struct usb_device *device;
int config; int interface; int altsetting;
/* Added by RMT so implementations can store other per-open-device data */ void *impl_info; };
Définition complète de la structure.
/*end usbi.h*/
/*extrait usb.h*/
et voila!
/* Data types */ struct usb_device;
Définition incomplète. Seul un pointeur de ce type peut être défini.
if (usb_os_open(udev) < 0) { free(udev); return NULL; }
return udev; }
/*end usb.h*/
tres logiquement je me lance dans l'ecriture d'un truc qui vas me permettre d'acceder au champ:
struct usb_dev_handle *my_usb_dev;
Ben non, tu n'as pas le droit. Le code est en quelque sorte sécurisé. Tu n'as pas le droit d'aller fouiller là où il ne faut pas. Seul l'implémen,teur a ce droit, et c'est ltôt logique. Pour voir les données, il faut une fonction (accesseur) qui pourrait ytrès bien te demander de montrer patte blanche, enregistrer les accès etc...
fprintf(stderr, " opened ref %x , device struct pointer at %xn",my_usb_dev->fd ,my_usb_dev->device);
ce qui a mon esprit donne acces aux membres fd et device.
et bien non le compilateur me donne une erreur : "dereferencing pointer to incomplete type"
Normal.
qu'es ce qui cloche, merci de m'eclairer.
Le C permet d'utiliser une technique dite de données opaques' qui permet de ne fournir à l'utilisateur qu'un pointeur vers les données, mais d'un type incomplet, ce qui interdit l'accès aux données. C'est une technique bien connue d'encapsulation des données.
http://mapage.noos.fr/emdel/tad.htm
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Sébastien wrote on 26/10/04 :
j'ai une fonction qui initialise un pointeur de type usb_dev_handle et dont
je
ne peux pas en parcourrir le contenu, alors ue les fonction de la
bibliotheque
(libusb) le font sans erreur. regarder comme suit.
/*extrait usbi.h*/
Le 'i' de 'usbi' signifie probablement 'interne' (n'est pas à la
disposition de l'utilisateur). Par contre, il y a fort à parier qu'il
existe un 'usb.h' qui, lui, est à la disposition de l'utilisateur.
struct usb_dev_handle {
int fd;
struct usb_bus *bus;
struct usb_device *device;
int config;
int interface;
int altsetting;
/* Added by RMT so implementations can store other per-open-device data */
void *impl_info;
};
Définition complète de la structure.
/*end usbi.h*/
/*extrait usb.h*/
et voila!
/* Data types */
struct usb_device;
Définition incomplète. Seul un pointeur de ce type peut être défini.
if (usb_os_open(udev) < 0) {
free(udev);
return NULL;
}
return udev;
}
/*end usb.h*/
tres logiquement je me lance dans l'ecriture d'un truc qui vas me permettre
d'acceder au champ:
struct usb_dev_handle *my_usb_dev;
Ben non, tu n'as pas le droit. Le code est en quelque sorte sécurisé.
Tu n'as pas le droit d'aller fouiller là où il ne faut pas. Seul
l'implémen,teur a ce droit, et c'est ltôt logique. Pour voir les
données, il faut une fonction (accesseur) qui pourrait ytrès bien te
demander de montrer patte blanche, enregistrer les accès etc...
fprintf(stderr, " opened ref %x , device struct pointer at
%xn",my_usb_dev->fd
,my_usb_dev->device);
ce qui a mon esprit donne acces aux membres fd et device.
et bien non le compilateur me donne une erreur : "dereferencing pointer to
incomplete type"
Normal.
qu'es ce qui cloche, merci de m'eclairer.
Le C permet d'utiliser une technique dite de données opaques' qui
permet de ne fournir à l'utilisateur qu'un pointeur vers les données,
mais d'un type incomplet, ce qui interdit l'accès aux données. C'est
une technique bien connue d'encapsulation des données.
http://mapage.noos.fr/emdel/tad.htm
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
j'ai une fonction qui initialise un pointeur de type usb_dev_handle et dont je ne peux pas en parcourrir le contenu, alors ue les fonction de la bibliotheque (libusb) le font sans erreur. regarder comme suit.
/*extrait usbi.h*/
Le 'i' de 'usbi' signifie probablement 'interne' (n'est pas à la disposition de l'utilisateur). Par contre, il y a fort à parier qu'il existe un 'usb.h' qui, lui, est à la disposition de l'utilisateur.
struct usb_dev_handle { int fd;
struct usb_bus *bus; struct usb_device *device;
int config; int interface; int altsetting;
/* Added by RMT so implementations can store other per-open-device data */ void *impl_info; };
Définition complète de la structure.
/*end usbi.h*/
/*extrait usb.h*/
et voila!
/* Data types */ struct usb_device;
Définition incomplète. Seul un pointeur de ce type peut être défini.
if (usb_os_open(udev) < 0) { free(udev); return NULL; }
return udev; }
/*end usb.h*/
tres logiquement je me lance dans l'ecriture d'un truc qui vas me permettre d'acceder au champ:
struct usb_dev_handle *my_usb_dev;
Ben non, tu n'as pas le droit. Le code est en quelque sorte sécurisé. Tu n'as pas le droit d'aller fouiller là où il ne faut pas. Seul l'implémen,teur a ce droit, et c'est ltôt logique. Pour voir les données, il faut une fonction (accesseur) qui pourrait ytrès bien te demander de montrer patte blanche, enregistrer les accès etc...
fprintf(stderr, " opened ref %x , device struct pointer at %xn",my_usb_dev->fd ,my_usb_dev->device);
ce qui a mon esprit donne acces aux membres fd et device.
et bien non le compilateur me donne une erreur : "dereferencing pointer to incomplete type"
Normal.
qu'es ce qui cloche, merci de m'eclairer.
Le C permet d'utiliser une technique dite de données opaques' qui permet de ne fournir à l'utilisateur qu'un pointeur vers les données, mais d'un type incomplet, ce qui interdit l'accès aux données. C'est une technique bien connue d'encapsulation des données.
http://mapage.noos.fr/emdel/tad.htm
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Emmanuel Delahaye
Jean-Marc Bourguet wrote on 26/10/04 :
Sébastien writes:
ce qui a mon esprit donne acces aux membres fd et device.
et bien non le compilateur me donne une erreur : "dereferencing pointer to incomplete type"
Tu n'as pas la definition du type. Inclus usbi.h.
T'as rien compris à l'encapsulation des données. T'es prof de quoi déjà ?
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Jean-Marc Bourguet wrote on 26/10/04 :
Sébastien <sebosac@wanadoo.fr> writes:
ce qui a mon esprit donne acces aux membres fd et device.
et bien non le compilateur me donne une erreur : "dereferencing pointer to
incomplete type"
Tu n'as pas la definition du type. Inclus usbi.h.
T'as rien compris à l'encapsulation des données. T'es prof de quoi déjà
?
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Emmanuel Delahaye
Jean-Marc Bourguet wrote on 26/10/04 :
Emmanuel Delahaye writes:
T'es prof de quoi déjà ?
Où as-tu vu que j'étais prof?
Ah, bon, ça me rassure... Je me perd un peut dans tous les intervenants de fclc... (Je crois que j'ai confondu avec Marc Boyer. Il est bien prof, lui ?)
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Jean-Marc Bourguet wrote on 26/10/04 :
Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
T'es prof de quoi déjà ?
Où as-tu vu que j'étais prof?
Ah, bon, ça me rassure... Je me perd un peut dans tous les intervenants
de fclc... (Je crois que j'ai confondu avec Marc Boyer. Il est bien
prof, lui ?)
--
Emmanuel
The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html
The C-library: http://www.dinkumware.com/refxc.html
Ah, bon, ça me rassure... Je me perd un peut dans tous les intervenants de fclc... (Je crois que j'ai confondu avec Marc Boyer. Il est bien prof, lui ?)
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
cedric
Emmanuel Delahaye wrote:
Le 'i' de 'usbi' signifie probablement 'interne'
C'est standard ca comme notation ? (standard au sens d'usuel bien sur).
Emmanuel Delahaye wrote:
Le 'i' de 'usbi' signifie probablement 'interne'
C'est standard ca comme notation ?
(standard au sens d'usuel bien sur).
C'est standard ca comme notation ? (standard au sens d'usuel bien sur).
C'est une regle d'usage (State of art ...). Personnellement, je mets un suffixe _i.
-- Emmanuel The C-FAQ: http://www.eskimo.com/~scs/C-faq/faq.html The C-library: http://www.dinkumware.com/refxc.html
"C is a sharp tool"
Gabriel Dos Reis
Emmanuel Delahaye writes:
| Jean-Marc Bourguet wrote on 26/10/04 : | > Emmanuel Delahaye writes: | > | >> T'es prof de quoi déjà ? | > | > Où as-tu vu que j'étais prof? | | Ah, bon, ça me rassure...
À choisir entre un prof et Jean-Marc, je choisis Jean-Marc. Et cela n'est pas une insulte aux profs. Savoir programmer n'est simplement pas une question de prof.
-- Gaby
Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
| Jean-Marc Bourguet wrote on 26/10/04 :
| > Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
| >
| >> T'es prof de quoi déjà ?
| >
| > Où as-tu vu que j'étais prof?
|
| Ah, bon, ça me rassure...
À choisir entre un prof et Jean-Marc, je choisis Jean-Marc.
Et cela n'est pas une insulte aux profs.
Savoir programmer n'est simplement pas une question de prof.
| Jean-Marc Bourguet wrote on 26/10/04 : | > Emmanuel Delahaye writes: | > | >> T'es prof de quoi déjà ? | > | > Où as-tu vu que j'étais prof? | | Ah, bon, ça me rassure...
À choisir entre un prof et Jean-Marc, je choisis Jean-Marc. Et cela n'est pas une insulte aux profs. Savoir programmer n'est simplement pas une question de prof.
-- Gaby
Jean-Marc Bourguet
cedric writes:
Emmanuel Delahaye wrote:
Le 'i' de 'usbi' signifie probablement 'interne'
C'est standard ca comme notation ? (standard au sens d'usuel bien sur).
D'avoir une notation pour ca oui. Le "i" je ne l'avais jamais vu (j'ai vu P et Pvt, pour PriVaTe).
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
cedric <rixed@happyleptic.NOSPAM.org> writes:
Emmanuel Delahaye wrote:
Le 'i' de 'usbi' signifie probablement 'interne'
C'est standard ca comme notation ? (standard au sens d'usuel bien
sur).
D'avoir une notation pour ca oui. Le "i" je ne l'avais jamais vu
(j'ai vu P et Pvt, pour PriVaTe).
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org