Поделиться через


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

Перед разыменованием параметра нужно выделить память внутри функции, для аннотации которых используется свойство Null в условии Pre.В следующем коде предупреждение C6011 возникает из-за попытки разыменования указателя null (pc) внутри функции без предварительного выделения памяти:

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

Использование malloc и free имеет много опасностей в терминах утечки памяти и исключений.Чтобы избежать все такие проблемы утечек и исключений, используйте механизмы, предоставляемые библиотекой стандартных шаблонов (STL) C++.Они включают shared_ptr, unique_ptr и vector.Дополнительные сведения см. в разделах Интеллектуальные указатели (современный C++) и Справочник по стандартной библиотеке C++.

См. также

Ссылки

NULL (CRT)

malloc

свободные

Основные понятия

Операторы косвенного обращения и адреса операнда

Другие ресурсы

Общие сведения о заметках

Null