Sdílet prostřednictvím


C6332

upozornění C6332: Neplatný parametr: předávání nuly funkci <function> jako parametru dwFreeType není povoleno.Výsledkem je selhání tohoto volání

Toto upozornění znamená, že je funkci VirtualFree nebo VirtualFreeEx předáván neplatný parametr.VirtualFree i VirtualFreeEx odmítnou nulový parametr dwFreeType.Parametr dwFreeType může být MEM_DECOMMIT nebo MEM_RELEASE.Hodnoty MEM_DECOMMIT a MEM_RELEASE však nesmí být používány společně ve stejném volání.Také se ujistěte, že návratová hodnota funkce VirtualFree není ignorována.

Příklad

Následující kód vygeneruje toto upozornění, protože je funkci VirtualFree předán neplatný parametr:

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

Chcete-li opravit toto upozornění, upravte volání funkce VirtualFree, jak je znázorněno v následujícím kódu:

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

Použití VirtualAlloc a VirtualFree má mnoho nástrah v podobě nevracení paměti a výjimek.Chcete-li zabránit těmto druhům problémů úniky a výjimkami zcela, použijte mechanismy, které jsou k dispozici v knihovně C++ STL.Patří mezi ně shared_ptr, unique_ptr a vector.Další informace naleznete v tématu Chytré ukazatele (moderní verze jazyka C++) a Standardní knihovna C++ – referenční dokumentace.

Viz také

Referenční dokumentace

IHostMemoryManager::VirtualAlloc – metoda

IHostMemoryManager::VirtualFree – metoda