Wikipedia has the answer, along with a number of other sources.
A segfault basically means you did something bad with pointers. This is probably a segfault:
char *c = NULL; ... *c; // dereferencing a NULL pointer
char *c = "Hello"; ... c = 'z'; // out of bounds, or in this case, writing into read-only memory
Or maybe this:
char *c = new char; ... delete  c; ... c = 'z'; // accessing freed memory
Same basic principle in each case – you’re doing something with memory that isn’t yours.