Je lis des chaînes en C++ en utilisant fread
où je lis et stocke shortSiteText
dans siteNames_. siteNames_ est déclaré comme std::vector<char*> siteNames_;
J'utilise siteNames_ dans d'autres fonctions mais parce que shortSiteText
est un pointeur, lorsque j'appelle la commande delete, la dernière entrée dans siteNames_
est modifiée. Comment puis-je empêcher cela?Empêche le dernier élément dans char * vector de changer
for (unsigned int i = 0; i <= nSites; i ++){
fread((char *) &shortSiteTextLength, 1, sizeof shortSiteTextLength, baseFile_);
shortSiteText = new char[shortSiteTextLength];
fread(shortSiteText,1, shortSiteTextLength,baseFile_);
siteNames_.push_back(shortSiteText);
}
delete [] shortSiteText;
J'ai essayé d'utiliser l'opérateur de déréférencement: siteNames_.push_back(*shortSiteText);
mais qui génère une erreur de compilation.
REMARQUE: Je dois utiliser fread et char * en raison du code existant.
Pourquoi ne pas utiliser 'std :: string'? Chaque fois que vous avez 'delete 'dans votre code, quelque chose pourrait très probablement être amélioré. – GManNickG
@GMan, j'utilise un code hérité ailleurs – Elpezmuerto
C'est ce à quoi sert 'c_str' /' data'/'& s [0]'. Et si cela ne fonctionne pas pour vous, faites 'std :: vector' et '& v [0]' à la place. ** Vous ne devriez jamais avoir à supprimer manuellement quelque chose. ** Votre problème entier est dû à une propriété imprécise, parce que vous essayez de le prendre en main. C'est dangereux et bug-monté. –
GManNickG