Pour cette fonction, je dois retourner une variable char *, avant de la renvoyer, je l'imprime et l'imprime bien. qu'est-il arrivé à la variable qui rend la variable de retour erronée et pourquoi?Renvoi de caractères erronés, impression incorrecte, retour incorrect (C++)
La fonction:
const char* NameErrorException::what() const throw()
{
std::string str = "NameErrorException: name \'";
str += _name;
str += "\' is not defimed";
std::cout << str.c_str()<< std::endl; //Prints good
return str.c_str();
}
Le code d'impression:
catch (std::exception& ex)
{
//Prints something like "▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌▌♀·┘v♦"
std::cout << ex.what() << std::endl;
}
(NameErrorException exception d'Héritier)
Merci!
Possible [en double] (http://stackoverflow.com/questions/6456359/what-is-stdstringc-str-lifetime). –
str est une variable locale et comme toutes les variables locales, elle sera collectée à la fin de la méthode. Si vous renvoyez un pointeur valide dans la méthode, il ne sera pas valide en dehors de la méthode s'il provient d'une variable locale, sauf si vous lui avez alloué l'espace. Cela vaut également pour les pointeurs renvoyés comme c_str() sauf si vous avez des raisons de penser que vous êtes renvoyé un pointeur qui ne sera pas détruit plus tard, ce qui n'est certainement pas votre cas. – Neil
Peut-être pas nécessairement un doublon, mais une réponse à ce problème est là pour sûr. –