Freigeben über


C6279

Aktualisiert: November 2007

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 zugewiesen, diesen jedoch mit dem delete []-Arrayoperator freigegeben hat. Wenn Speicher mit dem new-Skalaroperator zugewiesen 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) new-Operator und der globale delete-Operator nicht mit dem new[]-Operator und dem delete[]-Operator 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 Speicherzuordnungen 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;
}