C6011C6011

предупреждение C6011: разыменование ПУСТого указателя <name>warning C6011: dereferencing NULL pointer <name>

Это предупреждение означает, что код отменяет ссылку на потенциально пустой указатель.This warning indicates that your code dereferences a potentially null pointer. Если значение указателя недопустимо, результат становится неопределенным.If the pointer value is invalid, the result is undefined. Чтобы устранить эту проблему, проверьте указатель перед использованием.To resolve the issue, validate the pointer before use.

ПримерExample

В следующем коде создается это предупреждение, поскольку вызов malloc может вернуть значение null, если недостаточный объем памяти недоступен:The following code generates this warning because a call to malloc might return null if insufficient memory is available:

#include <malloc.h>

void f( )
{
  char *p = ( char * ) malloc( 10 );
  *p = '\0';

  // code ...
 free( p );
}

Чтобы исправить это предупреждение, проверьте указатель на значение null, как показано в следующем коде:To correct this warning, examine the pointer for a null value as shown in the following code:

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

    free( p );
  }
}

Функции могут иметь параметры, помеченные с помощью Null свойства в Pre условии.Functions may have parameters annotated by using the Null property in a Pre condition. Перед разыменованием параметра выделите память внутри этих функций.Allocate memory inside these functions before you dereference the parameter. Следующий код создает предупреждение C6011, так как предпринята попытка разыменования пустого указателя ( pc ) внутри функции без предварительного выделения памяти:The following code generates warning C6011 because an attempt is made to dereference a null pointer (pc) inside the function without first allocating memory:

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

Неосторожное использование malloc и free приводит к утечкам памяти и исключениям.The careless use of malloc and free leads to memory leaks and exceptions. Чтобы избежать такого рода утечек и проблем с исключениями, старайтесь не выделять исходную память самостоятельно.To minimize these kinds of leaks and exception problems altogether, avoid allocating raw memory yourself. Вместо этого используйте механизмы, предоставляемые стандартной библиотекой C++ (STL).Instead, use the mechanisms provided by the C++ Standard Library (STL). К ним относятся shared_ptr, unique_ptrи vector.These include shared_ptr, unique_ptr, and vector. Дополнительные сведения см. в разделе интеллектуальные указатели и Стандартная библиотека C++.For more information, see Smart Pointers and C++ Standard Library.

См. также разделSee also