The most common cause used to be dll incompatibility.
When you install a new application that updates some shared system .dll to a new version, and older applications already installed on your system are incompatible with the new version of the .dll. Microsoft is working hard on it and we can see that this problem appear less than before but it stile exist.
Windows Update also used to cause quite a few of these errors by updating system files that are incompatible with existing apps.
The last reason is data corruption, usually because of some kind of hardware failure.
For more info about what is a DLL you can read here.