警告 CA2014:stackalloc はループ内で使用しないでください。

.NET コード アナライザー ルール CA2014 は、.NET 5 以降では既定で有効になっています。 stackalloc 式がループ内で使用される C# コードに対して、ビルドの警告が生成されます。

変更内容

.NET 5 以降、.NET SDK には .NET ソース コード アナライザーが含まれています。 これらのルールのいくつかは、CA2014 を含め、既定で有効になっています。 このルールに違反し、警告をエラーとして扱うように構成されているコードがプロジェクトに含まれている場合、この変更によってビルドが破損する可能性があります。

stackalloc 式がループ内で使用されるルール CA2014 によって、C# コードが検索されます。 stackalloc によって、現在のスタック フレームからメモリが割り当てられます。 現在のメソッド呼び出しが戻るまでメモリは解放されません。これにより、スタック オーバーフローにつながる可能性があります。 スタック オーバーフローの例外をキャッチできないため、スタック オーバーフローが発生した場合はアプリが終了します。

導入されたバージョン

5.0

  • ループ内での stackalloc の使用を避けます。 ループの外側でメモリ ブロックを割り当て、それをループ内で再利用してください。 詳細については、CA2014 に関する記事を参照してください。

  • コード分析を完全に無効にするには、プロジェクト ファイルで EnableNETAnalyzersfalse に設定します。 詳細については、「EnableNETAnalyzers」を参照してください。

影響を受ける API

API 分析では検出できません。