Dans une application Unicode, l'intégration de chaînes de caractères standard nécessite la conversion de char en wchar_t. Cependant, les tentatives d'implémentation de cette conversion rencontrent souvent un comportement indéfini.
Considérez la fonction suivante :
const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t wc[cSize]; mbstowcs (wc, c, cSize); return wc; }
Cette fonction alloue un tableau de wchar_t, convertit le char en wchar_t, et renvoie le pointeur vers wc. Cependant, wc est une variable locale qui est désallouée à la fin de la fonction, ce qui entraîne un comportement indéfini lorsque le pointeur renvoyé est déréférencé.
L'erreur peut être corrigée en allouant le tableau wchar_t* dynamiquement au sein de la fonction :
const wchar_t *GetWC(const char *c) { const size_t cSize = strlen(c)+1; wchar_t* wc = new wchar_t[cSize]; mbstowcs (wc, c, cSize); return wc; }
Cette allocation dynamique garantit que la mémoire persistera au-delà de la durée de vie de la fonction.
C'est crucial à noter que l'appelant de GetWC() est désormais responsable de la désallocation de la mémoire allouée. Ne pas le faire entraînera une 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!