A segmentation fault,is a memory error in which a program tries to access a memory address that does not exist or the program does not have the rights to access.
There can be several reasons for this but everything boils down to the same point of trying to access a region (segment, a C program is stored in different memory segments) of code that certainly does not exist, or that it may exist, but not accessible to the invoking call.
The resulting system action is "core dump", which means to take a copy of data (a data dump) and store it in the memory, basically for debugging purposes later on.
Segmentation fault is a condition that cause the program to crash. They are caused when programmer is trying to read or write an illegal memory locations. In practice, segmentation faults are almost always due to trying to read or write a non-existent array element, not properly defining a pointer before using it, or accidentally using a variable's value as an address(in C program)