J'utilise ce code dans une classe pour faire une visite de contrôle WebBrowser un site:Quand dois-je libérer la mémoire?
void myClass::visitWeb(const char *url)
{
WCHAR buffer[MAX_LEN];
ZeroMemory(buffer, sizeof(buffer));
MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, url, strlen(url), buffer, sizeof(buffer)-1);
VARIANT vURL;
vURL.vt = VT_BSTR;
vURL.bstrVal = SysAllocString(buffer);
// webbrowser navigate code...
VariantClear(&vURL);
}
J'appelle visitWeb d'une autre fonction de vide qui est appelé à la handleMessage() pour l'application. Ai-je besoin de faire un peu de désallocation de mémoire ici ?, Je vois que vURL est désalloué par VariantClear mais devrais-je libérer la mémoire pour le tampon? On m'a dit que dans un autre bool, j'ai dans la même application que je ne devrais pas libérer quoi que ce soit parce que tout se vide quand le bool retourne vrai/faux, mais que se passe-t-il sur ce vide?
S'il vous plaît, ne dites pas "un autre vide" quand vous voulez dire "une autre fonction retournant le vide". Lorsque vous comprenez que vous avez affaire à de nombreuses fonctions, et que la seule différence est le type de retour, vous verrez les similitudes. –
Il semble que "un autre bool" se réfère à "une autre fonction retournant un bool". Cela suggère à son tour qu'il ne comprend pas comment les variables sortent du cadre. Le type de retour n'affecte pas du tout cela, et en fait les variables peuvent sortir des portées internes avant même qu'une fonction ne retourne. – MSalters
BTW, vous avez un dépassement de tampon. Le dernier paramètre à MultiByteToWideChar doit être 'MAX_LEN' (nombre de caractères). Vous passez actuellement 'MAX_LEN * sizeof (WCHAR)' (nombre d'octets). Et vous n'avez pas besoin de passer strlen (url); passez -1 à la place. – MSalters