Tom's Guide > Forum > Programmation > Porbleme avec des string dans une struct....

Porbleme avec des string dans une struct....

Forum Programmation : Porbleme avec des string dans une struct....

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonojur bonjour,
alors voila j'ai défini une structure de iste doublement chainée qui me permet de traiter des fichiers selon trois critères : le numéro d'inode , le nombre de liens durs et symboliques et le chemin vers ce fichier, voila le code de la struct :

Code :
  1. typedef struct listeFichier{
  2.     int numInode;
  3.     int nbLiens;
  4.     string chemin;
  5.     struct listeFichier *suivant;
  6.     struct listeFichier *precedent;
  7.     };



j'ai défini une fonction qui prend trois parametres en arguments permettant d'ajouter un fichier a la liste :

Code :
  1. void ajoutFichier(int numI,int nbL,string chemF)
  2.     {if(tete==NULL) //cas pour lequel la liste est vide
  3.         {
  4.         struct listeFichier *nouveau;
  5.         nouveau = (listeFichier*)malloc(sizeof(struct listeFichier));
  6.         nouveau->suivant=tete;
  7.         nouveau->precedent=NULL;
  8.         nouveau->numInode=numI;
  9.         nouveau->nbLiens=nbL;
  10.         nouveau->chemin=chemF; //probelme ici !! : erreur de segmentation
  11.         tete=nouveau;
  12.         }
  13.     else //quand la liste n'est pas vide
  14.         {
  15.         struct listeFichier *nouveau;
  16.         nouveau = (listeFichier*)malloc(sizeof(struct listeFichier));
  17.         nouveau->suivant=tete;
  18.         tete->precedent=nouveau;
  19.         nouveau->precedent=NULL;
  20.         nouveau->numInode=numI;
  21.         nouveau->nbLiens=nbL;
  22.         nouveau->chemin=chemF; //probelme ici !! : erreur de segmentation
  23.         tete=nouveau;
  24.         }
  25.     }



le probleme c'est que j'ai une erreur de segmentation quand j'affecte chemF à nouveau->cemin,
et je ne vois pas pourquoi, vous avez des idées ?

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

c'est du C ?
string, ça existe comme type ?

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

si tu utilise std::string, c'est du C++, c'est une classe.
la différence entre malloc/calloc et new est que new appelle les constructeurs pour les classes, ce que malloc/calloc ne font pas.
donc à la suite d'un malloc sur une structure contenant un string, la mémoire est alloué mais le constructeur n'est pas appelé, ce qui engendre un comportement indéfini.
modifie ta structure en classe en ajoutant un constructeur et un destructeur et utilises l'opérateur new


Message édité par coca25 le 28-11-2006 à 17:33:04
Répondre à coca25

bah c'est un mix de C et C++ en fait, a priori les struct sont compatibles C++, dans ce cas c'étati plus simple que de faire une classe ...

Répondre à oovaton

argh, non je peux pas faire ca, j'ai deja pas mal galéré a essayer de faire une classe, la c'est vachement plus simple et je pense pas que la crétion d'une classe soit justifiée. en plus c'st pour un tp noté que j'ai à rendre demai alors ...
peut etre en utilisant les char * ?


Message édité par oovaton le 28-11-2006 à 17:35:28
Répondre à oovaton

ah merde, c'est vrai que ya du string en c++.
mais il me semble que c'est pas tip/top de mélanger C et C++...

------------------------------ Don't panic!
mouths91 à dit : "[...]des rageux comme kelnem"
Répondre à Vinz42

j'ai une idée :
est ce que si je défini chemin comme un char * je peux lui donner ensuite la taille que je veux dans la fonction ajouterFichier ?

Répondre à oovaton

oui
mais fait gaffe à la modification de sa valeur (si elle dépasse)

mais c'est encore mieux d'utiliser new avec des classes


Message édité par coca25 le 28-11-2006 à 17:41:55
Répondre à coca25

ouais mais la j'ai quasiment fini, j'ai trouvé un bon tuto sur la conversion de string en char* donc je pense que ca va aller. merci pour votre aide en tout cas !

Répondre à oovaton

tu peux également modifier ta structure comme suit :

Code :
  1. typedef struct listeFichier{
  2.     int numInode;
  3.     int nbLiens;
  4.     string* chemin;
  5.     struct listeFichier *suivant;
  6.     struct listeFichier *precedent;
  7. };



puis dans ton code

Code :
  1. nouveau->chemin=new string(chemF);


Répondre à toam

okay je vais essayer ca dessuite !!
edit : c'est bon je viens de faire la modif et ca marche, pas d'erreur de segmentation en vue merci beaucoup !


Message édité par oovaton le 28-11-2006 à 18:04:00
Répondre à oovaton

oovaton a écrit :

bah c'est un mix de C et C++ en fait, a priori les struct sont compatibles C++, dans ce cas c'étati plus simple que de faire une classe ...



[Mode pointdevue="on"]
Personnellement, je suis contre cette pratique, le C et le C++ sont deux langages distincts donc on utilise soit l'un soit l'autre. Si tu fais du C, tu peux utiliser un char * sinon tu utilises ta string en C++. En clair, soit on utilise les types et fonctions de la libC, soit ceux de la STL mais pas les deux en meme temps
[Mode pointdevue="off"]

Sinon, un conseil, quand tu malloc, pense à vérifier le retour histoire que si ça échoue, tout ne plante pas ;)

Répondre à tebonb

mince en fait ca ne marche pas, ca pase à la compilation mais une fois que j'essai d'afficher ça me sors une adresse mémoire ...grrr
bon je vais essayer avec un char *.

Répondre à oovaton
Tom's Guide > Forum > Programmation > Porbleme avec des string dans une struct....
Aller à :

Il y a 2741 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens