クラッシュ (コンピュータ)

クラッシュ（）または異常終了（いじょうしゅうりょう）とは、コンピュータの分野において、アプリケーション（アプリ）やプログラムが、通常とは異なる形で終了することを指す言葉である。クラッシュの英語での本来の意味は「衝突、破壊、墜落」などであるが、本項では主に異常終了のケースについて記述する。
類義語.
異常終了の結果としての「ダウン」（）を含め、日本語では俗に「落ちた」、「死んだ」、「CTD」などとも言う。
メインフレームなどでは「ABEND（アベンド、の略）」とも言う。「フリーズ」（停止、固まる）を含む意味で使われることもある。
概要.
コンピュータにおけるクラッシュは、特定の入力パターン、異常値の入力、高負荷、長時間の連続稼動など、様々な事象がその引き金となり、アクセス違反、メモリリークなどのバグを誘発する。それらの結果、コンピュータを異常な状況におく。
このような状況であっても、本来のコンピュータは、状況を適切にハンドリングするようにプログラムされなければならないが、あらゆる異常な状況を想定してプログラムを開発するのは困難であり、現実にクラッシュが発生するのである。
アプリケーションプログラムがクラッシュした場合は、アプリケーションが突然終了してしまうため、ほとんどのケースで作業中の保存していなかったデータは失われてしまう。また、画面に不自然なウィンドウやアイコンが残ったり、「保護違反」や「例外」などのメッセージを伴うケースもある。
オペレーティングシステムがクラッシュした場合は、ブルースクリーンやカーネルパニックが発生したり、あるいは突然再起動がかかるなどの現象が起こる。
クラッシュ時にはこういった目に見える現象のほか、本来解放するべきメモリやリソースが解放されていない（メモリリーク、リソースリーク）、ディスク上の書き込み途中だったデータが不正な状態になっている、などの問題が起きることもある。
なお近代的なマルチタスク・オペレーティングシステムでは、後述するメモリ保護機能のように、アプリケーションプログラムがクラッシュしたとしても他のアプリケーションやOS自体に致命的な悪影響を及ぼすことのないように設計されていることがほとんどである。アプリケーションが使用していたメモリ領域も、たとえクラッシュしたとしても通常はOSによって適切に解放される。
クラッシュに備える技術.
クラッシュリポート.
クラッシュに至るバグを修正しようとする際、クラッシュ時に何が起きていたかの情報が有用である。しかしクラッシュ発生時はプログラムはすでに終了しているため、プログラム自身が情報を残すことは難しい。そこでクラッシュ時に情報を収集する仕組みをあらかじめ用意しておく例がある。この情報は特にデバッガの使えないエンドユーザー環境で発生したクラッシュの原因を特定する、「ポストモーテムデバッグ」（Post-mortem debug／プログラム検死型デバッグ）と呼ばれるデバッグ手法に役立つ。
自動復旧.
クラッシュは避け得ないものとして、発生した際の被害を抑えたり、自動復旧させるための技術もある。以下はその例である。
運用による緩和.
根本的な解決ではないものの、運用によってクラッシュの被害を抑えたり発生率を低下させることも行われている。