C6332

تحذير C6332: غير صالح معلمة: تمرير صفر كمعلمة dwFreeType إلى <دالة> هو ‏‏غير مسموح به. وهذا نتائج في فشل هذه المكالمة

Th هو التحذير يشير إلى أن معلمة غير صالحة هو التي يتم تمريرها إلى VirtualFree أو VirtualFreeEx. كل من VirtualFree و VirtualFreeEx رفض معلمة dwFreeType من الصفر. يمكن أن تكون معلمة dwFreeType MEM_DECOMMIT أو MEM_RELEASE. ومع ذلك، قيم MEM_DECOMMIT و MEM_RELEASE قد لا تستخدم معا في نفس يتصل. أيضا، تأكد من أن القيمة المرجعة من دالة VirtualFree هو لم يتم تجاهلها.

مثال

تنشئ التعليمة البرمجية التالية th هو تحذير لأن معلمة غير صالحة هو التي تم تمريرها إلى دالة 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 ...
} 

راجع أيضًا:

المرجع

أسلوب IHostMemoryManager::VirtualAlloc

أسلوب IHostMemoryManager::VirtualFree