Porbleme avec des string dans une struct....
Forum Programmation : Porbleme avec des string dans une struct....
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 :
|
j'ai défini une fonction qui prend trois parametres en arguments permettant d'ajouter un fichier a la liste :
Code :
|
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 ?
c'est du C ?
string, ça existe comme type ?
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
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 ...
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
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++...
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 ?
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
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 !
tu peux également modifier ta structure comme suit :
Code :
|
puis dans ton code
Code :
|
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
| 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
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 *.
Il y a 2741 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
