Porbleme avec des string dans une struct....

Porbleme avec des string dans une struct.... - C++ - Programmation

Marsh Posté le 28-11-2006 à 17:05:42    

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 ?

Reply

Marsh Posté le 28-11-2006 à 17:05:42   

Reply

Marsh Posté le 28-11-2006 à 18:02:27    

normal ... string m'a tout l'air d'être une classe C++ et tu l'alloues via un malloc => pas d'appel de constructeur ... l'objet n'étant pas dans un état valide, tout ce que tu peux vouloir faire dessus conduira à des comportements indéterminés (comprendre crashs)
 
si ce n'est pas le cas, merci d'expliciter d'où sort ton symbole string.

Reply

Marsh Posté le 28-11-2006 à 22:33:27    

+1
 
nouveau = (listeFichier*)malloc(sizeof(struct listeFichier));
 
n'importe quoi... on ne peut pas mélanger C et C++ à ce niveau, on ne fait pas de malloc sur des struct utilisant la STL ou même n'importe quel type un peu complexe. D'ailleur en C++ on n'est jamais sencé faire des malloc, on fait des new.
 
nouveau = new listeFichier;
tout simplement...
 
va réviser les bases du C++ avant d'attaquer la STL. Ne crois pas que C++ c'est du C avec string à la place de char*. Ce n'est pas, mais alors pas du tout ça.

Message cité 1 fois
Message édité par jesus_christ le 28-11-2006 à 22:34:45
Reply

Marsh Posté le 29-11-2006 à 01:33:38    

Je vous trouve bien dogmatiques.
 

Code :
  1. listeFichier *nouveau = new(malloc(sizeof(listeFichier))) listeFichier();


 
Il est clair qu'ouvaton n'a pas vraiment idée de ce qu'il fait, mais ce n'est pas une raison pour s'emballer, hein.

Reply

Marsh Posté le 29-11-2006 à 08:33:32    

jesus_christ a écrit :


va réviser les bases du C++ avant d'attaquer la STL.


STL et string SONT la base

Reply

Marsh Posté le 29-11-2006 à 14:46:24    

Taz a écrit :

STL et string SONT la base


pfff... faut toujours que tu trouves un truc à redire...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed