Most common reason for a Core dump is to access a memory address outside of your reach (memory that do not belong to your program). The operatingsystem interrupts the program with a interruption called SegFault or BusError depeding on how the program tried to access the invalid memory address. The program will then be forceful closed down by the kernel. If the kernel has been configured to create a core-dump (a dump of memory and stack of the program) one will be saved to disc. As noted in the other answer you may load the core-dump into GDB or other debugger and display what the program was doing at the time it crashed. This might or might not give you the problem at hand. Normally it's hard even for a experienced programmer to used these tools so be aware. If you want to try to use GDB, try this:
$ gdb /path/to/crashing/program/binary /path/to/core
(gdb) bt
'bt' will display 'backtraces' otherwise known as StackTraces, and can be useful for a programmer to track down the error.
If you are able to reproduce the error, you are probably lucker submitting a detailed bugreport to the creator of the program in question. Even me as a senior software developer takes that route from time to time. :-)