A crash (or system crash) in computing is when a computer program (such as a software application or an operating system) stops functioning properly. Often it will exit the affected program after encountering this type of error. The program responsible may appear to freeze until a crash reporting service reports the crash and potentially any details relating to it. If the program is a critical part of the operating system, the entire computer may crash, often resulting in a kernel panic or fatal system error. Many crashes are the result of single or multiple machine instructions running incorrectly. Typical causes are when the program counter is set to an incorrect address or a buffer overflow overwrites a portion of the affected program code due to an earlier bug. In either case, it is common for the CPU to attempt to access data or random memory values. Since all data values are possible to select but not always valid for the request, this often results in an illegal instruction exception. By chance, such data or random values could be valid (though unplanned) instructions. The original program problem (software bug) is considered as what “caused” the crash, but the actual fault may be an illegal instruction. The process of debugging such crashes is connecting the actual cause of the crash with the code that started the chain of events. This is often far from obvious; the original bug is usually perfectly valid code presented to the processor. In earlier personal computers, it was possible to cause hardware damage through attempting to write data to hardware addresses outside of the system’s main memory. The execution of arbitrary data on a system will result in a breakup of screen display. This is widely considered a severe system crash.