次の方法で共有


警告 C6333

無効なパラメーター: MEM_RELEAStandard Editionおよび 0 以外の dwSize パラメーターを 'function_name' に渡すことは許可されていません。 この呼び出しはエラーになります。

解説

両方VirtualFreeVirtualFreeEx 0 以外のMEM_RELEASEdwSizeを持つ a を拒否dwFreeTypeします。 渡される場合 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 呼び出し VirtualFreeで値が 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, 0, MEM_RELEASE);

    //  VirtualFree(lpvBase, PAGELIMIT * dwPageSize, MEM_DECOMMIT);
    // code...
}

また、呼び出しを使用 VirtualFree(lpvBase, PAGELIMIT * dwPageSize, MEM_DECOMMIT); してページをコミット解除し、後でフラグを使用して MEM_RELEASE 解放することもできます。

関連項目