次の方法で共有


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_ptrunique_ptrvector などがあります。詳細については、「スマート ポインター (Modern C++)」および「C++ 標準ライブラリ リファレンス」を参照してください。