次の方法で共有


警告 C6332

無効なパラメーター: dwFreeType パラメーターとして 'function' に 0 を渡すことは許可されていません。 この呼び出しはエラーになります。

この警告は、無効なパラメーターが渡VirtualFreeVirtualFreeExされていることを示します。

解説

VirtualFree 両方とも VirtualFreeEx 0 のパラメーターを dwFreeType 拒否します。 パラメーターには dwFreeType 、次のいずれかを MEM_DECOMMIT 指定できます MEM_RELEASE。 ただし、値 MEM_DECOMMIT は同じ呼び出し MEM_RELEASE で一緒に使用することはできません。 また、関数の戻り値が無視されていないことを VirtualFree 確認します。

コード分析名: VirtualFreeInvalidParam2

次のコードでは、無効なパラメーターが関数に渡されるため、警告 C6332 が生成されます 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, 0 );
  // code ...
}

この警告を修正するには、次のコードに示すように、関数の 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 );
  // code ...
}

メモリ リークとVirtualFree例外のVirtualAlloc観点から、多くの落とし穴があり、使用されます。 このような潜在的なリークを完全に回避するには、C++ 標準ライブラリ (STL) によって提供されるメカニズムを使用します。 これらには、次unique_ptrのようなvectorコンテナーが含まれますshared_ptr。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。

関連項目

VirtualAlloc メソッド
VirtualFree メソッド