Dereferencing "void *" pointer
Résolu
calimero33160
Messages postés
31
Date d'inscription
Statut
Membre
Dernière intervention
-
calimero33160 Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
calimero33160 Messages postés 31 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un problème de programmation en langage C, au sujet des pointeurs génériques.
J'ai en fait plusieurs types de structure (poisson, obstacle, nourriture et prédateur), et je souhaite créer un tableau de pointeurs référençant ces différents types d'objet (c'est un tableau à deux dimensions, du type "tableau [] []"). Le problème c'est qu'en C, il ne me semble pas que l'on puisse faire de tableau contenant des variables de type mixte. Je me suis donc orienté vers le pointeur générique "void *".
Je déclare donc mon tableau : void* tab[taille1][taille2];
Ensuite je le remplis avec des pointeurs :
tab[0][0]=creerPoisson(); (fonction qui renvoie un pointeur sur poisson)
tab[0][1]=creerObstacle();
etc, bref je remplis le tableau (certaines cases restent vides, donc NULL ;-) )
Ensuite je souhaite parcourir le tableau et savoir à quoi correspond chaque pointeur, sachant que chacune de mes structures possède un champ 'int type' d'une valeur de 0,1,2 ou 3 en fonction du type.
J'ai donc tenté de bêtement caster en n'importe quoi, du style if((poisson)t[i][j]->type==0), mais je me prends une erreur style "dereferencing 'void*' pointer".
Je tente donc avec tous les cast possibles (predateur, poisson, obstacle et nourriture), mais aucun ne semble vouloir fonctionner
Donc je demande votre aide, sachant que je ne suis pas extrêmement compétent en C ^^
Merci d'avance !
J'ai un problème de programmation en langage C, au sujet des pointeurs génériques.
J'ai en fait plusieurs types de structure (poisson, obstacle, nourriture et prédateur), et je souhaite créer un tableau de pointeurs référençant ces différents types d'objet (c'est un tableau à deux dimensions, du type "tableau [] []"). Le problème c'est qu'en C, il ne me semble pas que l'on puisse faire de tableau contenant des variables de type mixte. Je me suis donc orienté vers le pointeur générique "void *".
Je déclare donc mon tableau : void* tab[taille1][taille2];
Ensuite je le remplis avec des pointeurs :
tab[0][0]=creerPoisson(); (fonction qui renvoie un pointeur sur poisson)
tab[0][1]=creerObstacle();
etc, bref je remplis le tableau (certaines cases restent vides, donc NULL ;-) )
Ensuite je souhaite parcourir le tableau et savoir à quoi correspond chaque pointeur, sachant que chacune de mes structures possède un champ 'int type' d'une valeur de 0,1,2 ou 3 en fonction du type.
J'ai donc tenté de bêtement caster en n'importe quoi, du style if((poisson)t[i][j]->type==0), mais je me prends une erreur style "dereferencing 'void*' pointer".
Je tente donc avec tous les cast possibles (predateur, poisson, obstacle et nourriture), mais aucun ne semble vouloir fonctionner
Donc je demande votre aide, sachant que je ne suis pas extrêmement compétent en C ^^
Merci d'avance !
A voir également:
- Dereferencing ‘void *’ pointer
- Void(0); - Forum Windows
- Int main(void) ✓ - Forum C++
- Makes pointer from integer without a cast ✓ - Forum C
- Document.body.contenteditable = 'true'; document.designmode='on'; void 0 ✓ - Forum HTML
- Void traduction informatique ✓ - Forum C++
4 réponses
Bonjour,
En C, il me semble que les pointeurs dans ton tableau ne se mettent pas à NULL automatiquement, il est peut etre alors nécessaire de faire une (double) boucle for pour l'initialiser.
Etant donné que il s'agit de pointeur ne faudrait-il pas faire plutôt :
if((poisson*)t[i][j]->type==0)
En C, il me semble que les pointeurs dans ton tableau ne se mettent pas à NULL automatiquement, il est peut etre alors nécessaire de faire une (double) boucle for pour l'initialiser.
Etant donné que il s'agit de pointeur ne faudrait-il pas faire plutôt :
if((poisson*)t[i][j]->type==0)
Bonjour,
Tout d'abord merci de t'intéresser à mon problème.
J'ai malheureusement déjà une double boucle for qui initialise le tableau à NULL !
Mes structures sont en fait définies de cette manière :
typedef struct{
blablabla
}*poisson;
donc il ne me semble pas que je doive faire un cast en (poisson*), car (poisson) est déjà un pointeur...
Tout d'abord merci de t'intéresser à mon problème.
J'ai malheureusement déjà une double boucle for qui initialise le tableau à NULL !
Mes structures sont en fait définies de cette manière :
typedef struct{
blablabla
}*poisson;
donc il ne me semble pas que je doive faire un cast en (poisson*), car (poisson) est déjà un pointeur...