次の方法で共有


警告 C6283

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

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

解説

この問題により、リークやメモリ破損が発生する可能性があります。さらに、演算子がオーバーライドされる状況ではクラッシュする場合もあります。 配列 new [] を使用してメモリが割り当てられた場合、一般的には配列 delete[] を使用して解放する必要があります。

警告 C6283 は、整数や文字などのプリミティブ型の配列にのみ適用されます。 配列の要素がクラス型のオブジェクトである場合、警告 C6278 が発生します。

メモリ リークとdelete例外のnew観点から、多くの落とし穴があり、使用されます。 このような潜在的なリークを完全に回避するには、C++ 標準ライブラリ (STL) によって提供されるメカニズムを使用します。 これらには、次unique_ptrのようなvectorコンテナーが含まれますshared_ptr。 詳細については、「スマート ポインター」および「C++ 標準ライブラリ」を参照してください。

コード分析名: PRIMITIVE_ARRAY_NEW_DELETE_MISMATCH

次のコードでは、警告 C6283 が生成されます。 str は使用して new ...[...] 割り当てられますが、不一致の関数 deleteを使用して解放されます。

void f( )
{
    char *str = new char[50];
    delete str;
}

次のコードは、一致する関数 delete[]を使用してこの警告を修復します。

void f( )
{
    char *str = new char[50];
    delete[] str;
}