ListeChaines et pointeur void

xtremejames183 Messages postés 32 Date d'inscription vendredi 26 mai 2006 Statut Membre Dernière intervention 14 avril 2009 - 27 août 2007 à 02:56
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 30 août 2007 à 14:27
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

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
27 août 2007 à 11:20
Y a peut-être un problème de portée, ça serait bien de mettre tout le code.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
27 août 2007 à 11:47
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++
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
30 août 2007 à 14:27
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 !
0
Rejoignez-nous