Hey,
Je suis un débutant en C et a essayé de mettre en œuvre ma propre implémentation de liste chaînée, qui ressemble essentiellement comme ceci:C - Comptes liés problème de la liste et le pointeur
struct Element
{
void *value;
struct Element *next;
};
typedef struct
{
struct Element *first;
struct Element *last;
unsigned int size;
} LinkedList;
void LinkedList_init(LinkedList *this)
{
this->size = 0;
this->first = NULL;
this->last = NULL;
}
void LinkedList_add(LinkedList *this, void *value)
{
struct Element *node = malloc(sizeof(struct Element));
node->value = value;
node->next = NULL;
if (this->size == 0)
this->first = this->last = node;
else
{
this->last->next = node;
this->last = node;
}
this->size++;
}
Donc en bref, je veux une liste chaînée qui peut contenir des types arbitraires - j'ai entendu, c'est possible en C en utilisant des pointeurs de vide. Le problème se pose maintenant, quand je veux utiliser cette mise en œuvre, par exemple avec une structure comme valeur:
typedef struct
{
int baz;
} Foo;
int main(void)
{
LinkedList list;
Foo bar;
bar.baz = 10;
LinkedList_init(&list);
LinkedList_add(&list, (void *) &bar);
/* try to get the element, that was just added ... */
Foo *firstElement = (Foo *)list.first;
/* ... and print its baz value */
printf("%d\n", firstElement->baz);
return 0;
}
Le dernier appel de printf imprime juste des valeurs telles que -1077927056, qui ressemblent à une adresse mémoire. Donc c'est probablement un problème avec les pointeurs. Après une recherche sur le web ces derniers jours pour un problème similaire sur le web (je n'avais pas de chance avec ça), j'ai essayé de jeter ma propre logique et testé diverses combinaisons aléatoires * &. Il s'avère que c'était aussi une impasse. :(
Il est probablement quelque chose de simple pour un programmeur C plus expérimenté, mais je ne peux pas trouver la réponse S'il vous plaît aider. D
Argh, comment simple: D – Paran
... et la distribution à '(Foo *)' n'est plus nécessaire, ce Nous sommes sur la bonne voie. – caf