在Windows中,如何將GlobalAlloc
替換爲new
?在Windows中,如何用`new`替換`GlobalAlloc`?
你好, 我有此代碼段(從這裏:"Reading from a Mailslot") 與GlobalAlloc
分配內存。
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);
我想改變的代碼,並使用智能指針代替裸LPTSTR
(和擺脫GlobalFree
)和new
代替GlobalAlloc
。 cbMessage
是「下一個消息的大小,以字節爲單位」,所以我需要類似malloc
這對於無類型內存的作品,有沒有適合我的情況的任何形式的new
?
此代碼在'fResult == FALSE'時泄漏。 – tibur 2012-02-10 19:51:03
@tibur是的,我會解決它。謝謝。 – 2012-02-10 19:52:35
是的,只需撥打新電話。請記住考慮sizeof(TCHAR)。另外,爲什麼你還有'TCHAR'。這是很久以前的事了。 – 2012-02-10 19:55:51