Sdílet prostřednictvím


C6283

upozornění C6283: Proměnná <variable> se alokuje pomocí operátoru pole new [], ale je odstraňována skalárním operátorem delete.

Toto upozornění se zobrazí pouze v kódu jazyka C++ a označuje, že volající funkce má nekonzistentně přidělenou paměť operátorem new [] pole, avšak uvolněnou operátorem delete skaláru.Tato vada může způsobovat přetečení paměti, její poškození a v situacích, kdy jsou operátory přepsány, dojde k chybě.Pokud je paměť přidělena pomocí operátoru pole new [], obvykle by měla být uvolněna pomocí pole delete[].

Příklad

Následující kód generuje toto upozornění:

void f( )
{
  char *str = new char[50];
  // code ...
  delete str;
}

Pro opravu tohoto upozornění použijte následující kód:

void f( )
{
  char *str = new char[50];
  // code ...
  delete[] str;
}

Upozornění C6283 se týká pouze polí primitivních typů, například celých čísel nebo znaků.Pokud jsou prvky pole objekty typu třídy, pak je vydáno upozornění C6278.

Použití new a delete 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.