C6011

警告 C6011:正在取消对 NULL 指针 <name> 的引用

此警告意味着正在取消引用 null 指针。如果该指针的值无效,则结果是未定义的。

示例

在下面的代码中,由于对 malloc 的调用可能因没有足够的可用内存而返回 null,因此会生成此警告:

#include <malloc.h>

void f( )
{ 
  char *p = ( char * ) malloc( 10 );
  *p = '\0';
  
  // code ...
 free( p );
}

若要更正此警告,请检查指针的值是否为 null,如下面的代码所示:

#include <malloc.h>
void f( )
{
  char *p = ( char * )malloc ( 10 );
  if ( p ) 
  {
    *p = '\0';
    // code ...
    
    free( p );
  }
}

在取消引用参数前,必须在通过在前置条件中使用 Null 属性来批注参数的函数内分配内存。在下面的代码中,由于在尝试在该函数内取消引用 null 指针 (pc) 之前没有分配内存,因此会生成警告 C6011:

#include <sal.h>
using namespace vc_attributes;
void f([Pre(Null=Yes)] char* pc)
{
  *pc='\0'; // warning C6011 - pc is null
  // code ...
}

就内存泄露以及内存异常而言,malloc 与 free 方法存在许多陷阱.若要完全避免这些泄漏和异常问题,请使用 C++ 标准模板库 (STL) 提供的结构。其中包括 shared_ptrunique_ptrvector。有关更多信息,请参见智能指针(现代 C++)C++ 标准库参考

请参见

参考

NULL (CRT)

malloc

free

概念

间接寻址和 Address-of 运算符

其他资源

批注概述

null