Méthode de retour appropriée pour un pointeur de caractère constant à partir d'un std::string
En programmation, les outils de détection d'erreurs comme Coverity signalent les problèmes potentiels. L'un de ces problèmes est le retour problématique d'un pointeur char constant à partir d'un std::string, ce qui peut conduire à un comportement indéfini.
Considérez le code suivant :
const char * returnCharPtr() { std::string someString; // Some processing! return someString.c_str(); }
Le problème avec ceci L'approche est qu'une fois le std::string someString détruit, le pointeur char renvoyé devient invalide, pointant vers la mémoire libérée. Ce problème peut être résolu en renvoyant le std::string lui-même plutôt que son c_str():
std::string returnString() { std::string someString("something"); return someString; }
Cependant, soyez prudent lorsque vous accédez au pointeur char à partir du std::string renvoyé. Par exemple, ce qui suit est incorrect :
const char *returnedString = returnString().c_str();
Comme la std::string renvoyée est détruite, returnString reste en suspens et toute tentative d'accès à returnString.c_str() entraînera un comportement indéfini. Au lieu de cela, stockez l'intégralité de la std::string:
std::string returnedString = returnString(); // ... use returnedString.c_str() later ...
Cette approche garantit que le pointeur char reste valide tant que la std::string stockée existe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!