Freigeben über


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_ptrund 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 deletezugewiesen, 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;
}