[C++] ajouter dans une multimap des chaines de caractères...

ajouter dans une multimap des chaines de caractères... [C++] - C++ - Programmation

Marsh Posté le 17-07-2004 à 15:54:11    

salut,
j'ai un problème :
dans une boucle (dont je ne connais pas à l'avance le nombre d'itérations), je remplis une multimap<int, const char*> avec la méthode insert().
seulement voila, à chaque tour de boucle, je veux mettre une chaine dans la multimap, et l'adresse du char* est la même, c'est le contenu à cette adresse qui change. donc forcément dans ma multimap toutes les valeures des champs sont identique puisque les pointeurs le sont (et donc la valeur est le contenu de l'adresse au dernier passage de boucle).
 
comment je peux faire pour à chaque fois recopier la chaine a un endroit ou elle ne sera pas détruite ? on ne peut pas dire à la hashmap que comme value, elle ne prend pas juste le pointeur mais recopie en mémoire et prend le pointeur de cette nouvelle zone mem ?
 
encore si je savais le nombre exact de boucles je pourrais allouer ce qu'il me faut, mais la je peux pas... et le problème si je fais un new à chaque tour, comment je peux libérer la mémoire en fin de programme ?
 
merci
   ANT

Reply

Marsh Posté le 17-07-2004 à 15:54:11   

Reply

Marsh Posté le 17-07-2004 à 15:59:55    

multimap<int, const char*> >> tu aurais un const char * qui change ? tu as pas un probleme de conception ?
 
utilises std::string


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 17-07-2004 à 16:04:31    

oui c'est vrai, je voulais dire  multimap<int, char*>.
j'avais pensé à utiliser string mais le problème n'est-il toujours pas le même :
à chaque boucle je fais quoi ?
string buf = mon_char;
insert(..., buf);
?
mais dès la sortie de la boucle, l'objet string va être détruit non ?
et si je déclare  
string buf; en dehors de la boucle
et dans la boucle
buf = mon_char;
même problème que dans le 1er poste non ? dans la multimap y aura partour la même adresse vers la string "buf" ?

Reply

Marsh Posté le 19-07-2004 à 11:58:12    

non, un multimap porte le std::string, et le std::string porte la chaine (ce qui n'est pas le cas d'un char*)


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 19-07-2004 à 13:38:17    

yes, en effet j'avais testé tout ça hier et ça marche bien
 :hello:

Reply

Marsh Posté le 19-07-2004 à 14:13:50    

c'est quoi ces char * ?

Reply

Marsh Posté le 19-07-2004 à 14:39:42    

j'utilise la fonction _findfirst / _findnext qui utilise une structeur findata_t je crois, et le nom du fichier dans cette structure est le champ : char name[MAX_PATH];
mais si tu veux à chaque appel de findnext, l'adresse de name ne change pas c'est son contenu qui change, et donc avant je mettais toujours
insert(mypair(cle, fdata.name)); ce qui fait que cf 1er post...

Reply

Sujets relatifs:

Leave a Replay

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