Renvoi de tableaux locaux en C : éviter les fuites de mémoire
En C, le retour d'un tableau local peut entraîner des fuites de mémoire. Prenons l'exemple suivant :
char *recvmsg() { char buffer[1024]; return buffer; } int main() { char *reply = recvmsg(); ... }
Ici, la fonction recvmsg renvoie un pointeur vers un tampon de tableau local. Cependant, ce tableau est détruit au retour de la fonction, laissant un pointeur pendant. Accéder à ce pointeur ultérieurement entraînera un comportement indéfini, conduisant potentiellement à une fuite de mémoire.
Renvoyer un std::vector
Pour résoudre ce problème, on peut renvoyer un std::vecteur
std::vector<char> recvmsg() { std::vector<char> buffer(1024); ... return buffer; } int main() { std::vector<char> reply = recvmsg(); }
Utiliser char* avec std::vector
Si vous devez utiliser un char* ailleurs dans le code, vous pouvez utiliser &reply[0] pour obtenir un pointeur vers le premier élément du std::vector. Par exemple :
void f(const char* data, size_t size) {} f(&reply[0], reply.size());
Éviter d'utiliser du nouveau
Enfin, il est recommandé d'éviter autant que possible d'utiliser du nouveau. La gestion manuelle de la mémoire avec new peut entraîner des fuites de mémoire si la mémoire allouée n'est pas correctement désallouée. Au lieu de cela, comptez sur des conteneurs comme std::vector qui gèrent automatiquement la 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!