ListeChaines et pointeur void

Signaler
Messages postés
32
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
14 avril 2009
-
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
-
Voil le topo:



Une liste chainees

typedef struct list_st
{
    void   *data;
    struct list_st   *next,
}List;

et une fonction AddData permettant d'ajouter des donnes a la fin de la list

void AddData(List   **node,void   *data)
{
    List   *cur = *node
   
cur->data = data ;
cur->next = *node;
*node = cur;
}

voila le code marche impec si je veux ajouter des types primitives (int ,char..)
AddData(&list,(int   *)6);
AddData(&List,(char *)"hello");
mais voila quand je veux ajouter une structure qui renferment plusieues valeur :
typede struct test
{
char   *key,*value;
int code;
}Test;


AddData(&list,(void *)Test);


l'insertion est OK mais quand je veux acceder a la structure inserrer precedemment dans la liste j'obtient un erreur genre BAD-POINTER refernce pendant le run-time et autre conneries...

Ma question est :
Comment puis-je inserrer une structure dans un liste chaines et acceder apres a la structure inserrer avec une fonction de comparaison genre strcmp(list->key,data->key)?

dois-je utiliser memcpy pour copier bytes-per-bytes ou ...

A Vos Les Studios =>

3 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Y a peut-être un problème de portée, ça serait bien de mettre tout le code.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
AddData(&list, (int*)6);
C'est quoi ce cirque, mettre adresse 6 ???


cur->data = data;
tu init le POINTEUR data avec un 'int' sans alloc, mystique.

ciao...
BruNews, MVP VC++
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,

AddData(&list,(void *)Test);

Ca, ça ne compilera pas vu que Test est un type.Je suppose que tu voulais dire :

Test monTest;
AddData(&list,(void *)monTest);

Mais là, que fais tu ? Tu convertis une structure monTest en void *...
Je crois que tu voulais faire ça plutôt : mettre en place l'adresse de ta structure dans ta liste chaînée:

Test monTest;
AddData(&list,(void *)&monTest);

Par contre, attention à ce que la structure ne soit pas détruite avant ta liste chaînée !