No Ifrit ha ragione, avevo constatato anche io che il segmentation fault si verificasse in corrispondenza delle istruzioni che dice lui e mi ero dato la stessa spiegazione che dice lui.

Quanto usi delle printf() di debug ricorda di mettere sempre '\n' alla fine della stringa di formato, altrimenti è probabile che questa non ti venga stampata fino alla prossima istruzione di output a video (e nel tuo programma "la prossima" non c'è, visto che quella è l'unica), invece con '\n' forzi lo svuotamento dello stream di output.

Per esempio, compilando ed eseguendo il tuo codice così com'è ottengo:

codice:
5
1
2
3
4
5
Segmentation fault
invece, aggiundendo semplicemente '\n' qui:

codice:
  printf(" è ora della Segmentation Fault \n");
ottengo

codice:
5
1
2
3
4
5
 è ora della Segmentation Fault
Segmentation fault
In ogni caso, giusto per quotare in toto il post di Ifrit, mi associo al suo "grido di dolore": fate sì che il codice sia facilmente intellegibile (oltre che leggibile!) senza costringere chi vuole tentare di darvi una mano a martellarsi il cranio per capire cosa voi avevate intenzione di fare... l'ideale è usare non solo nomi di variabili sensate ma anche i benedetti commenti