C6279

警告 C6279:<variable> 使用标量 new 分配,但使用数组 delete [] 删除

此警告仅在 C++ 代码中出现,它意味着调用函数存在下面的不一致现象:它用标量**“new”运算符分配内存,却用数组“delete []”运算符来释放内存。 如果内存是用标量“new”分配的,则它通常应当用标量“delete”**来释放。

这很可能会造成问题,原因至少有三个:

  • 尽管调用了析构函数,但是未调用数组中各个对象的构造函数。

  • 如果全局(或类特定的)**“operator new”“operator delete”“operator new[]”“operator delete[]”**不兼容,则有可能会出现意外的结果。

此缺陷的后果很难准确预测。 它可能会因未调用构造函数而使用未初始化的内存而导致随机行为或系统崩溃。 或者,在运算符已被重写时,此缺陷可能导致内存分配和系统崩溃。 在极少情况下,这种不匹配可能无关紧要。 分析工具目前无法区分这些情况。

示例

下面的代码生成此警告:

class A
{
  // members
};

void f ( )
{
  A *pA = new A;
  //code ...
  delete[] pA;
}

若要更正此警告,请使用下面的代码:

void f( )
{
  A *pA = new A;
  //code ...
  delete pA;
}