다음을 통해 공유


경고 C6333

잘못된 매개 변수: MEM_RELEASE 및 0이 아닌 dwSize 매개 변수를 'function_name'에 전달할 수 없습니다. 이로 인해 이 호출이 실패합니다.

설명

둘 다 VirtualFree 및 0이 MEM_RELEASEdwFreeType 아닌 값이 있는 의 값을 거부합니다dwSizeVirtualFreeEx. MEM_RELEASE 전달되면 매개 변수는 dwSize 0이어야 합니다.

코드 분석 이름: VIRTUALFREEINVALIDPARAM3

예시

다음 코드 샘플에서는 이 경고를 생성합니다.

#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...
}

이 경고를 수정하려면 다음을 호출할 때 값 dwSize 이 0인지 확인합니다 VirtualFree.

#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); 페이지를 디커밋하고 나중에 플래그를 사용하여 MEM_RELEASE 릴리스할 수도 있습니다.

참고 항목