C6283
警告 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 は、整数や文字などのプリミティブ型の配列にのみ適用されます。配列の要素がクラス型のオブジェクトである場合、警告 C6278 が発生します。
new と delete の使用には、メモリ リークと例外に関して多くの落とし穴があります。これらのリークと例外の問題を完全に回避するには、C++ の標準テンプレート ライブラリ (STL) によって提供される機構を使用します。これには、shared_ptr、unique_ptr、vector などがあります。詳細については、「スマート ポインター (Modern C++)」および「C++ 標準ライブラリ リファレンス」を参照してください。