警告 C6283: <變數> 是以陣列 new [] 配置,但以純量 delete 刪除
這項警告只會出現在 C++ 程式碼中,表示呼叫函式是以陣列 new [] 運算子配置記憶體,但是以純量 delete 運算子釋放記憶體。這項缺失可能會造成遺漏、記憶體損毀,而在運算子已被覆寫的情況下,則會造成當機。如果是以陣列 new [] 配置記憶體,則通常應該是以陣列 delete[] 釋放記憶體。
範例
下列程式碼將產生出這個警告:
void f( )
{
char *str = new char[50];
// code ...
delete str;
}
若要更正這則警告,請使用下列程式碼:
void f( )
{
char *str = new char[50];
// code ...
delete[] str;
}
警告 C6283 只會套用到基本型別 (Primitive Type) 的陣列,如整數或字元。如果陣列元素為類別型別的物件,則會發出警告 C6278。
就記憶體遺漏和例外狀況而言, new 和 delete 的使用上有很多缺點。若要避免這類遺漏和例外狀況的問題,請使用 C++ Standard Template Library (STL) 提供的機制。其中包括 shared_ptr、 unique_ptr和 vector。如需詳細資訊,請參閱智慧型指標 (現代 C++)與C++ 標準程式庫參考。