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 appears less than it did before, but still exists.
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 a DLL is you can read here.