C6279
警告 C6279: <variable> 是以純量 new 配置,但以陣列 delete [] 刪除
這項警告只會在 C++ 程式碼中出現,並指出正在呼叫之函式的記憶體不是一律以純量 new 運算子所配置,而會以陣列 delete [] 運算子釋放記憶體。 如果記憶體是以純量 new 配置,則它一般會以純量 delete 釋放。
至少有下列三項原因可能會導致問題的產生:
雖然會叫用 (Invoke) 陣列中個別物件的解構函式 (Destructor),但不會叫用建構函式。
如果全域 (或類別特定) 的 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;
}