When a program is allocated memory in the computer, it is allocated in segments. These segments are put in a list as being used by your program.
Every memory access by every program is tested against this list for ownership. If your program attempts to access memory it does not own, the operating system sends it the segmentation violation signal, which in turn will cause it to dump a core file (current memory image) for debugging and then KILL the program.
Programs attempt bad memory accesses via buffer overflow bugs or bad pointer handling.
You can also see this message pop up if your memory or your motherboard is going bad.