Liste chainee et wData

Signaler
Messages postés
43
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
3 septembre 2005
-
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
-
Bonjour,

J'ecris un petit programme (client/serveur) pour transferer des fichiers via une socket.

ca fonctionne sans souci. je liste egalement les fichiers du disque en recursif sans souci. la ou ca coince :

je cree une liste chainee avec les noms de chaque fichier dans la liste. les elements s'ajoutent bien en tete (je fais un cout a chaque fois) par contre, lorsque j'affiche toute la liste, tout part dans l'espace avec des caracteres qui semblent indiquer que je ne lis pas la memoire au bon endroit, cette fonction passe sans probleme avec des types entiers, dans ma liste mes elements contiennent "wData.cFileName" :

void Afficher()
{
Element* element = liste; //element->valeur est un char*
while(element != NULL)
{
cout << element->valeur << "\t";
element = element->suivant;
}

cout << endl;
}

QQn pourrait m'aider ?

Merci.

5 réponses

Messages postés
43
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
3 septembre 2005

ma fonction ajout :

void Ajouter(char* valeur)
{
Element* element= new Element;
char *tmp;

//ajout en tete
tmp = (char *) malloc(strlen(valeur));
tmp = valeur;
element->valeur = tmp;
element->suivant = liste;
liste = element;
}

ma struct :
struct Element
{
char* valeur;
Element* suivant;
};

De l'aide svp........
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
tmp = valeur; ???

tu ne fais pas de copie des octets ? Tu remplaces le pointeur avec le '='.

Faut aussi allouer un octet de + que strlen pour copier le ZERO final.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
43
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
3 septembre 2005

??
Messages postés
43
Date d'inscription
mercredi 29 janvier 2003
Statut
Membre
Dernière intervention
3 septembre 2005

je ne sais pas comment faire. je m'en sors pas avec les mallocs. tu pourrais me dire comment faire ? eventuellement les qqs lines de code qui vont bien ??

Grand Merci.
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
tmp = (char *) malloc(strlen(valeur) + 1);
// tmp = valeur; NON
strcpy(tmp, valeur);

ciao...
BruNews, Admin CS, MVP Visual C++