Stack overflow is a programming error in which an attempt to write data to a particular block of memory fails because there is no space left in the block. This type of error happens in the same way as buffer overflows, heap overflows, and stack buffer overflows. The difference between these types of errors depends on the computer data structure being used, and the common feature is that an attempt occurs to write more data than there is available space to hold it.
Symptoms of a stack overflow can vary depending on the computer language used and the error reporting machinery available. In C++, a stack overflow often manifests itself as a segmentation fault, and frequently there is no additional information given to determine where or how the overflow happened. An overflow in Java often results in a virtual machine crash that gives out a reasonably detailed error file. Regardless of the language in which an overflow happens, the overflow can almost always be corrected by proper debugging and identification of the original overflow source.
Computer languages that offer explicit memory management are often easier to safeguard against stack overflow. Widely accepted programming practice usually dictates that for every segment of memory a program allocates, the program should also delete itself. C++ allows this mechanism, and careful monitoring in this way can keep the amount of memory a program uses to a minimum. Languages that do not offer explicit memory management, and instead use implicit memory management, are more difficult to shield from stack overflow errors. Java handles its own memory inside its virtual machine, so data cannot be explicitly deleted at will to make room for more.
A common mistake of novice programmers is to assume that a stack overflow cannot happen in computer languages that handle their own memory management. While this seems plausible at first, it is not actually the case. Languages with implicit memory management often have garbage collectors that free unnecessary blocks of memory, but these garbage collectors do not always work at the time a programmer expects. Relying on garbage collectors is relatively dangerous, and it cannot always protect a program from an overflow error.
Overflow errors can be cataclysmic and halt an entire program, or they can be almost silent and allow a program to continue onward. These second types of errors are often the hardest to find because an error may occur that came from an overflow many lines of code before. A stack overflow doesn't often necessitate searching through an entire program, but the longer a program can run after an overflow, the more difficult the error may be to find and fix.