コンピュータにおけるストレージ違反とは、タスクがアクセスを許可されていないコンピュータのストレージ領域にアクセスしようとした際に発生する、ハードウェアまたはソフトウェアの障害のことである。
ストレージ違反には、例えば、タスクが所有していないストレージからの読み取り、書き込み、または解放などが含まれます。一般的なストレージ違反の例として、スタックバッファオーバーフローがあります。これは、プログラムがコールスタックに設定された制限を超えようとする場合に発生します。また、メモリ保護が不完全(またはまったくない)な状態で、別のスレッドが「所有」するメモリを変更しようとする場合も、ストレージ違反に該当します。
CICSなどのトランザクションシステムでは、トランザクションが所有していないストレージに書き込みが可能な状況で、ストレージ違反が発生する可能性があります。このような違反は、ストレージ保護やトランザクション分離などの機能を有効にすることで軽減できます。
ストレージ違反は、プログラムが違反後も一定期間動作してからクラッシュすることが多いため、検出が難しい場合があります。例えば、解放されたメモリ領域へのポインタが保持され、後で再利用されることでエラーが発生する可能性があります。そのため、問題が発覚してから対処するのではなく、違反が発生した時点で検出することに重点が置かれています。
CICSのようなシステムでは、ストレージ違反は(CICSカーネルによって)「シグネチャ」を使用して検出されることがあり、そのシグネチャをテストして、違反が上書きされているかどうかを確認できます。
ストレージ違反をより適切に検出するために代替ランタイムライブラリを使用することもできますが、その代償としてオーバーヘッドが増加します。[ 1 ] 一部のプログラミング言語では、このような事態を防ぐためにソフトウェア境界チェックを使用しています。
一部のプログラムデバッグソフトウェアは、テスト中に違反を検出する機能も備えています。