segfault = (en général) accès illégal à un emplacement mémoire; genre déréférencer NULL ou une adresse qui n'a pas été allouée ou une accès à une zone mémoire libérée … bref : le problème est dans les accès mémoire.
Je peux voir que tu ne compiles pas avec les options qui te préviennent d'erreurs éventuelles, le if en l13 n'est pas une conditionnelle mais une affectation. Ajoute -Wall -Wextra …
Pour avoir plus d'infos, essaye de compiler avec les options debug et utilise un outil comme valgrind.
Le crayon la gomme et le papier sont les meilleurs outils du programmeur !
git is great because Linus did it, mercurial is better because he didn't.