다음을 통해 공유


경고 C6332

잘못된 매개 변수: 'function'에 dwFreeType 매개 변수로 0을 전달할 수 없습니다. 이로 인해 이 호출이 실패합니다.

이 경고는 잘못된 매개 변수가 전달되고 VirtualFree 있음을 VirtualFreeEx나타냅니다.

설명

VirtualFreeVirtualFreeEx 다 0의 매개 변수를 dwFreeType 거부합니다. 매개 변수는 dwFreeType 둘 중 하나 MEM_DECOMMIT 일 수 있습니다.MEM_RELEASE 그러나 값 MEM_DECOMMITMEM_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(표준 라이브러리)에서 제공하는 메커니즘을 사용합니다. 여기에는 < a0/> unique_ptr및 컨테이너(예: vector.)가 포함shared_ptr됩니다. 자세한 내용은 스마트 포인터 및C++ 표준 라이브러리를 참조하세요.

참고 항목

VirtualAlloc 메서드
VirtualFree 메서드