Ich habe eine Funktion, die eine Million Mal in meinem Code verwendet wird, und es ist ein Speicherleck drin.So vermeiden Sie Memory Leak mit der Rückgabe von const char *
Es dauert eine const wchar_t*
als Eingabe und gibt eine const char*
zurück. Jetzt verstehe ich, dass dieser Zeiger zurückgegeben() wäre erforderlich, um eine explizite delete[]
von der aufrufenden Funktion (aber ich kann es mir nicht leisten), da dies würde bedeuten, ich muss es an allen Standorten ändern.
Der Code ist wie:
inline const char * W2N(const wchar_t* wstr)
{
int cw=lstrlenW(wstr);
if (cw==0)
{
CHAR *psz=new CHAR[1]; *psz='\0'; return psz;
}
int cc=WideCharToMultiByte(CP_ACP,0,wstr,cw,NULL,0,NULL,NULL);
if (cc==0) return NULL;
CHAR *psz=new CHAR[cc+1];
cc=WideCharToMultiByte(CP_ACP,0,wstr,cw,psz,cc,NULL,NULL);
if (cc==0)
{
delete[] psz; return NULL;
}
psz[cc]='\0';
return psz;
}
Gibt es etwas, dass ich um diese Funktion tun können Speicherverlust zu vermeiden.
Vereinbart tobi303, aber der Zeiger psz, der am Ende zurückgegeben wird, verursacht Leck, da es nie freigegeben wurde. –
Wissen Sie, wann die Clientaufruffunktion den von 'W2N()' zurückgegebenen Speicher beendet hat? – quamrana
Warum nicht 'std :: string' anstelle von' char * 'verwenden? – Barmar