C6333

Aktualisiert: November 2007

C6333

Warnung C6333: Ungültiger Parameter: Das Übergeben von MEM_RELEASE und einem dwSize-Parameter ungleich 0 an <Funktion> 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 übergeben wird. Beide Funktionen weisen einen dwFreeType von MEM_RELEASE mit einem Wert ungleich 0 (null) von dwSize zurück. Bei der Übergabe von MEM_RELEASE muss der dwSize-Parameter gleich 0 (null) sein. Stellen Sie zudem sicher, dass der Rückgabewert dieser Funktion nicht ignoriert wird.

Beispiel

Im folgenden Beispielcode wird diese Warnung generiert:

#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, PAGELIMIT * dwPageSize, MEM_RELEASE); 
  //code...
}

So korrigieren Sie die Warnung unter Verwendung des folgenden Beispielcodes

#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 );

  //  VirtualFree(lpvBase, PAGELIMIT * dwPageSize, MEM_DECOMMIT); 
  // code...
}

Sie können auch den VirtualFree(lpvBase, PAGELIMIT * dwPageSize, MEM_DECOMMIT);-Aufruf verwenden, um einen Decommit für Seiten auszuführen. Zur späteren Freigabe verwenden Sie dann das MEM_RELEASE-Flag.

Siehe auch

Referenz

IHostMemoryManager::VirtualAlloc-Methode

IHostMemoryManager::VirtualFree-Methode