Freigeben über


Warnung C6332

Ungültiger Parameter: Das Übergeben von Null als dwFreeType-Parameter an 'function' ist nicht zulässig. Dies führt zu einem Fehler bei diesem Aufruf.

Diese Warnung gibt an, dass ein ungültiger Parameter an VirtualFree oder VirtualFreeEx.

Hinweise

VirtualFree und VirtualFreeEx beide lehnen einen dwFreeType Parameter von Null ab. Der dwFreeType Parameter kann entweder MEM_DECOMMIT oder MEM_RELEASE. Die Werte MEM_DECOMMIT und MEM_RELEASE dürfen jedoch nicht zusammen im gleichen Aufruf verwendet werden. Stellen Sie außerdem sicher, dass der Rückgabewert der VirtualFree Funktion nicht ignoriert wird.

Codeanalysename: VirtualFreeInvalidParam2

Beispiel

Der folgende Code generiert die Warnung C6332, da ein ungültiger Parameter an die VirtualFree Funktion übergeben wird:

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

Um diese Warnung zu korrigieren, ändern Sie den Aufruf der VirtualFree Funktion, wie im folgenden Code gezeigt:

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

Die Verwendung von VirtualAlloc und VirtualFree hat viele Fallstricke in Bezug auf Speicherlecks und Ausnahmen. Um diese Arten potenzieller Lecks vollständig zu vermeiden, verwenden Sie die Mechanismen, die von der C++-Standardbibliothek (STL) bereitgestellt werden. Dazu gehören shared_ptr, , unique_ptrund Container wie vector. Weitere Informationen finden Sie unter Intelligente Zeiger und C++-Standardbibliothek.

Siehe auch

VirtualAlloc Methode
VirtualFree Methode