次の方法で共有


C6011

警告 C6011: NULL ポインター <名前> を逆参照しています

この警告は、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 );
  }
}

パラメーターを逆参照する前に Pre 条件で 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 などがあります。詳細については、「スマート ポインター (Modern C++)」および「C++ 標準ライブラリ リファレンス」を参照してください。

参照

関連項目

NULL (CRT)

malloc

free

概念

間接演算子とアドレス演算子

その他の技術情報

注釈の概要

Null