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.