Warnung C6283
'Variable-Name' wird mit array new [], aber gelöscht mit skalarer Löschung
Diese Warnung wird nur in C++-Code angezeigt. Sie gibt an, dass die aufrufende Funktion mit dem new []
-Arrayoperator Speicher inkonsistent belegt, diesen jedoch mit dem delete
-Skalaroperator freigegeben hat.
Hinweise
Dieser Fehler kann Verluste, Speicherbeschädigungen, und, wenn Operatoren überschrieben wurden, Abstürze verursachen. Wenn Speicher mit dem new []
-Arrayoperator belegt wird, wird er i. d. R. mit dem delete[]
-Arrayoperator freigegeben.
Warnung C6283 gilt nur für Arrays von Grundtypen wie ganze Zahlen oder Zeichen. Wenn Elemente des Arrays Objekte vom Klassentyp sind, wird die Warnung C6278 ausgegeben.
Die Verwendung von new
und delete
hat viele Fallstricke in Bezug auf Speicherlecks und Ausnahmen. Um diese Arten potenzieller Lecks vollständig zu vermeiden, verwenden Sie die Mechanismen, die von der C++-Standardbibliothek (STL) bereitgestellt werden. Dazu gehören shared_ptr
, , unique_ptr
und Container wie vector
. Weitere Informationen finden Sie unter Intelligente Zeiger und C++-Standardbibliothek.
Codeanalysename: PRIMITIVE_ARRAY_NEW_DELETE_MISMATCH
Beispiel
Der folgende Code generiert Warnung C6283. str
wird mithilfe der new ...[...]
nicht übereinstimmende Funktion delete
zugewiesen, wird jedoch freigegeben:
void f( )
{
char *str = new char[50];
delete str;
}
Der folgende Code korrigiert diese Warnung mithilfe der übereinstimmenden Funktion delete[]
:
void f( )
{
char *str = new char[50];
delete[] str;
}