A software bug is a problem with the code in a computer program which makes it not work properly. They can cause inconvenience to the user and may make their computer crash or freeze. Most computer programs have bugs. A program that has a large number of bugs (or possibly a single or a few serious bugs) is said to be buggy.

Most bugs are caused by bad programming by the developer, but sometimes they can be caused by compiler problems. When bugs are found, people send bug reports to the developer to tell them about the bug and let them fix it.

Sometimes, people say that their computer has a bug when something is wrong with it. The problem is usually caused by a computer virus which has infected their computer and is making it slow or do different things.

Some bugs are harmless, for example, many video games incorrectly allow objects to move through walls. Other bugs are more severe, for example, a bug in a navigation system that causes an airplane to explode.

Types of bugs

Buffer overflow 
A buffer overflow happens when a program writes to or reads from an area of memory that it is not supposed to access.

Arithmetic overflow 
An arithmetic overflow happens when a number contained in a variable is increased beyond the highest number that the variable allows. This will usually cause the number to reset back to zero.

Infinite loop 
An infinite loop happens when a program enters a loop (a series of instructions that is repeated many times) and there is no way out of the loop. This can cause the program to freeze.

Roundoff errors 
If a floating point variable doesn't have enough precision, the number stored in it can be inaccurate. This can cause various problems depending on the type of program, for example it could cause a navigation program to navigate to an unintended location, or distorted sound in an audio recording program.

Division by zero 
Division by zero is an invalid math operation. If a program divides an integer by zero, it will crash. On Linux, the message displayed when this bug occurs is "floating point exception", even though floating point numbers were not involved. Floating point math sometimes allows division by zero. This will usually result in a special "not a number" value.

Clipping problems 
In video games, clipping problems, also called collision detection problems, occur when an object passes through a barrier (such as a wall, floor, or ceiling) that it was not intended to pass through. This is a very common bug found throughout many video games. This can happen, for example, in Doom 2 when a crushed monster is resurrected by an arch-vile. Clipping problems can often be used as a time-saving tactic in speedruns, for example, in Super Mario 64 it is possible to skip walking up the spiral staircase in the castle by jumping through the ceiling.

Security bugs 
Security bugs are bugs that allow an intruder to either gain access to the computer, or cause the computer to crash. Causing the computer to crash is called a denial-of-Service attack. Security bugs are considered especially important to fix because they might allow intruders to steal important information such as credit card numbers or passwords. Examples of security bugs include Heartbleed and Shellshock.

Misbugs 
A misbug is a bug that has been used as a feature. An example would be a bug in an Android phone that allows users to gain root access.

Hardware bugs 
Some bugs affect hardware (the physical parts of a computer) instead of software. For example, running the instruction lock cmpxchg8b eax on old Pentium processors would cause the processor to stop working until rebooted. Since hardware bugs are physical design flaws, they can not be corrected with a software update, although it may be possible to work around (hide) the bug with a software update.

Software