Gérer les tableaux locaux en C : éviter les fuites de mémoire
Le problème en question se pose lorsque vous tentez de renvoyer un tableau local à partir d'une fonction. Comme illustré dans l'extrait de code donné :
char *recvmsg() { char buffer[1024]; return buffer; }
Cette approche déclenche un avertissement en raison de l'adresse de retour pointant vers une variable locale avec une durée de vie limitée.
Pour répondre à ce problème, il est Il est recommandé d'utiliser une structure de données alternative qui garantit une durée de vie stable à la baie. Une option viable consiste à utiliser un conteneur de bibliothèque standard, en particulier std::vector
Voici une version révisée de la fonction recvmsg :
std::vector<char> recvmsg() { std::vector<char> buffer(1024); // ... return buffer; }
Dans la fonction principale, le tableau peut être attribué à un std::vector
std::vector<char> reply = recvmsg();
S'il est nécessaire d'accéder à l'adresse char*, elle peut être obtenue via :
&reply[0]
Cette approche atténue le problème en gérant l'allocation de mémoire de la baie en interne , empêchant tout risque de comportement indéfini ou de fuite de mémoire.
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!