Segmentation Faultの原因は主に不正なメモリへのアクセスです。
たとえば
int array[10];
array[100] = 1;
なんてことをしてしまうと起きてしまいます。
「こんなことやるわけねぇよ」なんて思っていても
やってしまうものなのです。
Segmentation Faultの起きている場所を調べるには
gdbを使うと簡単です。
まず、コンパイル時にオプション-gをつける。
gdb ./a.out
を実行する。
run
を実行する。
このようにするとエラーを起こしている場合、
どこでエラーが起きているのかがわかります。