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