Retour de tableau local : comprendre et éviter les avertissements en C
Considérez l'extrait de code suivant :
char *recvmsg(){ char buffer[1024]; return buffer; } int main(){ char *reply = recvmsg(); ..... }
Ceci le code est destiné à récupérer un tableau de caractères via la fonction recvmsg(). Cependant, cela déclenche un avertissement :
warning C4172: returning address of local variable or temporary
Cet avertissement indique que le retour de recvmsg() est l'adresse d'une variable locale, ce qui est inapproprié car la durée de vie de la variable se termine à la sortie de la fonction.
La solution : std::vector
Pour résoudre ce problème, une meilleure approche consiste à utiliser une bibliothèque standard conteneur, tel que std::vector
Le code mis à jour à l'aide de std::vector ressemble à ceci :
std::vector<char> recvmsg() { std::vector<char> buffer(1024); //.. return buffer; } int main() { std::vector<char> reply = recvmsg(); }
Accès aux données de caractères :
Si vous Si vous avez besoin d'accéder aux données brutes de caractères du vecteur, vous pouvez utiliser :
void f(const char* data, size_t size) {} f(&reply[0], reply.size());
Cette méthode vous permet d'intégrer de manière transparente le vecteur avec C API ou API C qui attendent char*.
Éviter new :
Il est généralement recommandé de minimiser l'utilisation de new en C . En vous appuyant sur des conteneurs comme std::vector, vous évitez le besoin de gestion manuelle de la mémoire, réduisant ainsi les fuites de mémoire potentielles et améliorant la maintenabilité du code.
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!