次の方法で共有


警告 C6279

'variable-name' はスカラー new で割り当てられ、配列 delete [] で削除されます

この警告は C++ コードでのみ表示され、呼び出し元の関数がスカラー new 演算子を使用してメモリを一貫して割り当てず、配列 delete[] 演算子を使用して解放したことを示します。 メモリがスカラー型の new によって割り当てられた場合は、通常、スカラー型の delete によって解放する必要があります。

解説

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

このような割り当ての問題を完全に回避するには、C++ 標準ライブラリ (STL) によって提供されるメカニズムを使用します。 これらには、次unique_ptrのようなvectorコンテナーが含まれますshared_ptr。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。

コード分析名: NEW_ARRAY_DELETE_MISMATCH

次のコードでは、警告 C6279 が生成されます。 A は次を使用して new 割り当てられますが、次を使用して delete[]削除されます。

class A
{
  // members
};

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

次のコードは、代わりに使用することでこの警告を delete 回避します。

class A
{
  // members
};

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

関連項目