C6333
경고 C6333: 매개 변수가 잘못되었습니다. MEM_RELEASE 및 0이 아닌 dwSize 매개 변수를 <function>에 전달하면호출이 실패합니다.
이 경고는 VirtualFree 또는 VirtualFreeEx에 잘못된 매개 변수가 전달되고 있다는 것을 나타냅니다.이들 함수는 모두 dwSize의 값이 0이 아닌 MEM_RELEASE의 dwFreeType을 거부합니다.MEM_RELEASE를 전달할 때는 dwSize 매개 변수가 0이어야 합니다.또한 이 함수의 반환 값이 무시되지 않도록 해야 합니다.
예제
다음 샘플 코드에서는 이 경고를 발생시킵니다.
#include <windows.h>
#define PAGELIMIT 80
DWORD dwPages = 0; // count of pages
DWORD dwPageSize; // page size
VOID f( VOID )
{
LPVOID lpvBase; // base address of the test memory
BOOL bSuccess;
SYSTEM_INFO sSysInfo; // system information
GetSystemInfo( &sSysInfo );
dwPageSize = sSysInfo.dwPageSize;
// Reserve pages in the process's virtual address space
lpvBase = VirtualAlloc(
NULL, // system selects address
PAGELIMIT*dwPageSize,// size of allocation
MEM_RESERVE,
PAGE_NOACCESS );
if (lpvBase)
{
// code to access memory
}
else
{
return;
}
bSuccess = VirtualFree(lpvBase, PAGELIMIT * dwPageSize, MEM_RELEASE);
//code...
}
이 경고를 해결하려면 다음 샘플 코드를 사용합니다.
#include <windows.h>
#define PAGELIMIT 80
DWORD dwPages = 0; // count of pages
DWORD dwPageSize; // page size
VOID f( VOID )
{
LPVOID lpvBase; // base address of the test memory
BOOL bSuccess;
SYSTEM_INFO sSysInfo; // system information
GetSystemInfo( &sSysInfo );
dwPageSize = sSysInfo.dwPageSize;
// Reserve pages in the process's virtual address space
lpvBase = VirtualAlloc(
NULL, // system selects address
PAGELIMIT*dwPageSize,// size of allocation
MEM_RESERVE,
PAGE_NOACCESS );
if (lpvBase)
{
// code to access memory
}
else
{
return;
}
bSuccess = VirtualFree(lpvBase, 0, MEM_RELEASE );
// VirtualFree(lpvBase, PAGELIMIT * dwPageSize, MEM_DECOMMIT);
// code...
}
또한 VirtualFree(lpvBase, PAGELIMIT * dwPageSize, MEM_DECOMMIT)를 사용하여 decommit 페이지를 호출한 다음 나중에 MEM_RELEASE 플래그를 사용하여 이를 해제할 수 있습니다.