C6279
Warnung C6279: <Variable> wird mit dem new-Skalaroperator zugeordnet, aber mit dem delete []-Arrayoperator gelöscht.
Diese Warnung wird nur in C++-Code angezeigt. Sie gibt an, dass die aufrufende Funktion mit dem new-Skalaroperator Speicher inkonsistent belegt, diesen jedoch mit dem delete []-Arrayoperator freigegeben hat. Wenn Speicher mit dem new-Skalaroperator belegt wird, wird er i. d. R. mit dem delete-Skalaroperator freigegeben.
Es gibt mindestens drei Gründe dafür, dass dies Probleme verursacht:
Die Konstruktoren für die einzelnen Objekte im Array werden – im Gegensatz zu den Destruktoren – nicht aufgerufen.
Wenn der globale (oder klassenspezifische) Operator new und der globale Operator delete nicht mit dem Operator new[] und dem Operator delete[] kompatibel sind, kann dies zu unerwarteten Ergebnisse führen.
Es ist schwierig, die genauen Auswirkungen dieses Fehlers vorherzusagen. Er kann ein zufälliges Verhalten oder Abstürze verursachen. Beides ist zurückzuführen auf die Verwendung von nicht initialisiertem Speicher, da keine Konstruktoren aufgerufen werden. Oder der Fehler führt zu Speicherbelegungen und Abstürzen in Situationen, in denen Operatoren überschrieben werden. In seltenen Fällen spielt der Konflikt ggf. gar keine Rolle. Derzeit unterscheidet das Analysetool nicht zwischen den beiden Situationen.
Beispiel
Der folgende Code generiert diese Warnung:
class A
{
// members
};
void f ( )
{
A *pA = new A;
//code ...
delete[] pA;
}
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
void f( )
{
A *pA = new A;
//code ...
delete pA;
}