Tableaux générique
mélody
-
mélody -
mélody -
Bonjour,un problème avec les pointeurs générique.
voici mon code:
struct A{
void ** cles;
}
typedef struct A *A;
void **cles(A self) {
return self->cles;
}
struct B {
A deleg
}
typedef struct B*B
si je fais
void affiche(B self) {
for(int i=0;i<10;i++)
if(*(cles(self->delg)+i*size)>0) //je veux accéder à l'élément d'indice i du tableau cles
printf("%d\n",1);
}
mais la ligne if(*cles .... provoque une erreur de segmentation ca fait 2 jours que j'essaie plusieurs combinaisons mais rien a faire. quelqun aurait une solution svp?
voici mon code:
struct A{
void ** cles;
}
typedef struct A *A;
void **cles(A self) {
return self->cles;
}
struct B {
A deleg
}
typedef struct B*B
si je fais
void affiche(B self) {
for(int i=0;i<10;i++)
if(*(cles(self->delg)+i*size)>0) //je veux accéder à l'élément d'indice i du tableau cles
printf("%d\n",1);
}
mais la ligne if(*cles .... provoque une erreur de segmentation ca fait 2 jours que j'essaie plusieurs combinaisons mais rien a faire. quelqun aurait une solution svp?
A voir également:
- Tableaux générique
- Clé générique windows 10 - Guide
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- Les tableaux word - Guide
- Pilote audio generique - Télécharger - Pilotes & Matériel
Pour avoir une réponse, il faut que le bénévole potentiellement répondeur comprenne la question ! Ne pas le décourager par une exigence démesurée, par un phrasé incompréhensible, par un manque d'informations, par un code illisible et non indenté. Ici c'est, je pense, ce dernier cas qui s'applique.
A tous, je dis qu'il faut indenter le code.
Ceci dit, je n'aime pas beaucoup ce type de déclaration: typedef struct A *A;. Pourquoi? On simplifie mais l'abstraction engendrée nous fais perdre la notion des choses; je m'explique:
- si j'ai bien compris lorsque, dans le code, on mettra A, le préprocesseur le remplacera par struct A*;. Alors là, se rend-on encore compte qu'après la déclaration A Z, Z est un pointeur et, qu'en conséquence, il ne faudra surtout pas oublier de lui allouer de la mémoire avant de l'utiliser, sinon c'est le segment fault assuré ;-)
L'erreur ne vient peut-être pas de là mais une erreur de segmentation mène dans 99% des cas à une erreur f'allocation (oubli ou insuffisance).
Bon courage.