Windowsでは、GlobalAlloc
をnew
に置き換えるにはどうすればよいですか? GlobalAlloc
でメモリを割り当てる :Windowsでは、 `GlobalAlloc`を` new`で置き換えるにはどうしたらいいですか?
こんにちは、 私は("Reading from a Mailslot"ここから)このコードのスニペットを持っています。
DWORD cbRead = 0;
LPTSTR lpszBuffer = (LPTSTR) ::GlobalAlloc(GPTR, cbMessage); //cbMessage is from a call to GetMailslotInfo
if(NULL == lpszBuffer)
return FALSE;
lpszBuffer[0] = '\0';
BOOL fResult = ::ReadFile(hSlot, lpszBuffer, cbMessage, &cbRead, 0);
if (fResult)
{
_tprintf(TEXT("Contents of the mailslot: %s\n"), lpszBuffer);
}
::GlobalFree((HGLOBAL) lpszBuffer);
私は、コードを変更し、代わりにGlobalAlloc
の代わりに裸LPTSTR
(およびGlobalFree
を取り除くために)とnew
のスマートポインタを使用したいと思います。 cbMessage
は "次のメッセージのサイズ(バイト)"なので、malloc
のようなものが必要です。これは型なしメモリで動作します。new
は私の場合に適していますか?
このコードは、 'fResult == FALSE'のときにリークします。 – tibur
@tiburはい、私はそれを修正します。ありがとうございました。 –
はい、ただ電話するだけです。 sizeof(TCHAR)を考慮に入れてください。また、なぜあなたはまだ 'TCHAR'を持っていますか?それは長い過去の時間です。 –