Tableaux de void *

angebrune8 Messages postés 22 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 26 mars 2009 - 21 mars 2009 à 18:47
angebrune8 Messages postés 22 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 26 mars 2009 - 22 mars 2009 à 02:03
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?

3 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
22 mars 2009 à 00:20
Plusieurs remarques :
* évite d'utiliser le même nom pour la structure et son pointeur;
* tu peux remplacer l'accès par simplement if(cles(self->deleg)[i]>0) printf(...);
   mais le code avant était correct. Par contre, pourquoi tester si >0, vu que c'est un pointeur?

faudrait mettre un peu plus de code, notamment l'initialisation de self, parce que c'est là que doit être le problème.

Ceci fonctionne par exemple:

struct _A{void**cles;};
typedef struct _A A;
struct _B{A*deleg;};
typedef struct _B B;

void**cles(A*self){return self->cles;}
void affiche(B*self)
{
   int i;
   for(i=0;i<10;i++)
      if(cles(self->deleg)[i]>0) printf("1\n");
   return;
}

int main(void)
{
   A a;
   B b;
   a.cles=malloc(40);
   b.deleg=&a;
   affiche(&b);
   free(a.cles);
   return 0;
}

Accessoirement, à quoi sert la fonction cles, puisque A::cles est publique?
0
angebrune8 Messages postés 22 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 26 mars 2009
22 mars 2009 à 02:00
en fait les structures A et B sont dans des modules différents si jamais je fais B->deleg->cles ca ne marche pas. Ainsi clés permet d'acceder au tableau clés. Non?
0
angebrune8 Messages postés 22 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 26 mars 2009
22 mars 2009 à 02:03
là g juste donnée une utilisation possible mais si tu veux je peux t'envoyer tout le code. (c'est long). je travaille en fait sur les b_arbres.
0
Rejoignez-nous