私のコードで何百万回も使用されている関数があり、メモリリークがあります。const charを返すことでメモリーリークを回避する方法*
入力としてconst wchar_t*
が入力され、const char*
が返されます。 私はこのポインタが返された(const char*
)明示的なdelete[]
を呼び出す関数から取得する必要があることを理解していますが、これは私がすべての場所でそれを変更する必要があるためです。
コードは次のようである:
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;
}
は、私はメモリリークを避けるために、この機能の周りに何かできることはあります。
tobi303と合意しましたが、最後に返されたポインタpszは決して割り当て解除されなかったため、リークを引き起こしています。 –
クライアント呼び出し関数が 'W2N()'によって返されたメモリで終了したことを知っていますか? – quamrana
'char *'の代わりに 'std :: string'を使わないのはなぜですか? – Barmar