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.