共用方式為


C6279

警告 C6279: <variable> 是以純量 new 配置,但以陣列 delete [] 刪除

這項警告只會在 C++ 程式碼中出現,並指出正在呼叫之函式的記憶體不是一律以純量 new 運算子所配置,而會以陣列 delete [] 運算子釋放記憶體。 如果記憶體是以純量 new 配置,則它一般會以純量 delete 釋放。

至少有下列三項原因可能會導致問題的產生:

  • 雖然會叫用 (Invoke) 陣列中個別物件的解構函式 (Destructor),但不會叫用建構函式。

  • 如果全域 (或類別特定) 的 operator newoperator deleteoperator new[]operator delete[] 不相容,可能會產生未預期的結果。

這項缺失的實際狀況難以預測。 因為未初始化之記憶體的用法 (未叫用建構函式),所以可能導致隨機的行為或當機。 或者,可能會在覆寫了運算子的情況下,導致記憶體配置和當機。 只有在極少數的情況下,不相符的情況可能並不重要。 分析工具現在無法區別這些情況。

範例

下列程式碼將產生出這個警告:

class A
{
  // members
};

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

若要更正這則警告,請使用下列程式碼:

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