C6011
Upozornění C6011: přesměrování ukazatele <name> s hodnotou NULL
Toto upozornění znamená, že došlo k pokusu o dereferenci ukazatele s hodnotou null.Pokud je hodnota ukazatele neplatná, výsledek je nedefinován.
Příklad
Následující kód vygeneruje toto varování, protože volání funkce malloc může vrátit hodnotu null, pokud není k dispozici dostatek paměti:
#include <malloc.h>
void f( )
{
char *p = ( char * ) malloc( 10 );
*p = '\0';
// code ...
free( p );
}
Chcete-li opravit toto varování, otestujte ukazatel na hodnotu null, jak je znázorněno v následujícím kódu:
#include <malloc.h>
void f( )
{
char *p = ( char * )malloc ( 10 );
if ( p )
{
*p = '\0';
// code ...
free( p );
}
}
Paměť uvnitř funkce, jejíž parametry jsou označeny pomocí vlastnosti Null, je nutné alokovat v podmínce Pre před dereferencováním parametru.Následující kód vygeneruje varování C6011, protože se uvnitř funkce pokouší dereferencovat ukazatel null (pc) bez alokování paměti:
#include <sal.h>
using namespace vc_attributes;
void f([Pre(Null=Yes)] char* pc)
{
*pc='\0'; // warning C6011 - pc is null
// code ...
}
Použití malloc a free má mnoho nástrah v podobě nevracení paměti a výjimek.Chcete-li zabránit těmto druhům problémů úniky a výjimkami zcela, použijte mechanismy, které jsou k dispozici v knihovně C++ STL.Patří mezi ně shared_ptr, unique_ptr a vector.Další informace naleznete v tématu Chytré ukazatele (moderní verze jazyka C++) a Standardní knihovna C++ – referenční dokumentace.
Viz také
Referenční dokumentace
Koncepty
Deferenční operátory a operátory adresy