次の方法で共有


C6279

警告 C6279: <変数> はスカラー new で割り当てられていますが、配列 delete [] で削除されています。

この警告は、C++ だけで発生します。呼び出し関数がスカラー型の new 演算子によって一貫性のないメモリ割り当てを行い、配列 delete [] 演算子によって解放したことを示します。メモリがスカラー型の new によって割り当てられた場合は、通常、スカラー型の delete によって解放する必要があります。

これによって問題が生じる原因は、少なくとも 3 つあります。

  • 配列内の個別のオブジェクトのコンストラクターは呼び出されませんが、デストラクターは呼び出されます。

  • グローバルな (またはクラス固有の) new 演算子および delete 演算子new[] 演算子および delete[] 演算子と互換性がない場合、予期しない結果が生じる可能性があります。

この問題による影響を正確に予測することは困難です。初期化されていないメモリを使用すると、コンストラクターが呼び出されないために、ランダムな動作やクラッシュが発生する可能性があります。また、演算子がオーバーライドされた場合にメモリの割り当てやクラッシュが発生する可能性があります。まれに、不一致が重要な問題とならない場合もあります。分析ツールでは、現在、これらの状況は区別されません。

使用例

この警告が発生するコード例を次に示します。

class A
{
  // members
};

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

この警告を解決するには、次のコードを使用します。

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