Warnung C6279
'Variable-Name' wird skalar neu zugeordnet, mit Arraylöschung gelöscht []
Diese Warnung wird nur im C++-Code angezeigt und weist darauf hin, dass die aufrufende Funktion dem Skalaroperator new
inkonsistent Speicher zugewiesen hat, sie jedoch mit dem Arrayoperator delete[]
freigegeben hat. Wenn Speicher mit Skalar new
zugewiesen wird, sollte er in der Regel mit Skalar delete
freigegeben werden.
Hinweise
Es ist schwierig, die genauen Auswirkungen dieses Fehlers vorherzusagen. Es kann zu zufälligen Verhaltensweisen oder Abstürze führen, weil nicht initialisierter Arbeitsspeicher als Konstruktoren nicht aufgerufen werden. Oder der Fehler führt zu Speicherbelegungen und Abstürzen in Situationen, in denen Operatoren überschrieben werden. Das Analysetool unterscheidet derzeit nicht zwischen diesen Situationen.
Um diese Arten von Zuordnungsproblemen 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: NEW_ARRAY_DELETE_MISMATCH
Beispiel
Der folgende Code generiert Warnung C6279. A
wird mithilfe von new
, aber gelöscht mit delete[]
:
class A
{
// members
};
void f()
{
A *pA = new A;
//code ...
delete[] pA;
}
Im folgenden Code wird diese Warnung stattdessen vermieden delete
:
class A
{
// members
};
void f()
{
A *pA = new A;
//code ...
delete pA;
}