警告 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;
}
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示