"Violacion de segmento" en C

Hola,
estoy aprendiendo a programar en C i m'he encontrado con un problema que no se resolver, cuando compilo el programa, me sale lo siguiente:

randwalk.c: In function 'main':
randwalk.c: 97:9: warning: passing argument 1 of 'sprintf' from incompatible pointer type [enabled by default]
/usr/include/stdio.h:361:12: note: expected 'char * __restrict__' but argument is of type 'struct FILE *'
randwalk.c:98:9: warning: passing argument 1 of 'fopen' from incompatible pointer type [enabled by default]
/usr/include/stdio.h:269:14: note: expected 'const char * __restrict__' but argument is of type 'struct FILE *'
de todas formas compila porque es solo un warning pero me encuentro en otro problema tambien cuando executo el programa, me dice "Violacion de segmento". ¿Alguien puede decirme a que se debe? Seguidamente hay el codigo.
Muchas gracias.

#include "librw.h" //Llibreria de les funcions que utilitzarem

int main ()
{ srand(time(NULL));
printf ("---------------\n");
printf ("Pràctica 1: Passejades aleatòries \n");
printf ("--------------- \n");
printf ("Escrit per: \n");
printf (" \n");
printf (" \n");
printf (" \n");
printf ("\n");

int n, k, *pos_x, *pos_y, max_x, max_y, min_x, min_y; //--Declaració de variables enteres i punters
FILE *fitxer_rw; //--Declarem un punter a un arxiu
char arxiu_rw[FILENAME_MAX]; //--Declarem una variable tipus text per a poder donar nom a l'arxiu

int *distancia, punt_x, punt_y;
FILE *fitxer_dist;
FILE *fitcher_rw;
char arxiu_dist[FILENAME_MAX];

int i,j,m,sortir=1;

//--Aquesta inicialització es per assegurar-nos de que el bucle "do" es realitza sempre
n=0;
k=0;

do
{
do
{
printf ("Numero de passejades aleatories que vols fer:\n"); //Demanem al usuari
scanf ("%d", &k);
printf ("Numero de passos que vols fer: \n");
scanf ("%d", &n);
fflush(stdin);
}while (n<1 || k<1); //-- ||vol dir OR

for (i=0; i

{Falta un for que no me deja incluir para postear} //Bucle per a guardar més d'un passeig
pos_x=(int*)malloc(n*sizeof(int)); //Reserva memória per a les posicions x
pos_y=(int*)malloc(n*sizeof(int)); //Reserva memória per a les posicions y

passejada(n, pos_x, pos_y);

max_x = maxim(pos_x,n); //--Calculem el maxim de x i de y
max_y = maxim(pos_y,n);

min_x = minim(pos_x,n); //--Calculem el minim de x i de y
min_y = minim(pos_y,n);

//--Mostrem els maxims i minims per pantalla

printf("/-----------------------------/\n");
printf("Passejada n: %d \n",(i+1));
printf("Maxim de X: %d\n",max_x);
printf("Minim de X: %d\n",min_x);
printf("Maxim de Y: %d\n",max_y);
printf("Minim de Y: %d\n",min_y);
printf("/-----------------------------/\n");

//--Generem el nom de l'arxiu
sprintf(arxiu_rw, "rw%d.txt", (i+1));

//--Obrim el fitxer i guardem en ell les posicions X Y
if ((fitxer_rw = fopen(arxiu_rw, "w")) != NULL)
{ {
{Falta un for que no me deja incluir para postear}
{
fprintf(fitxer_rw,"%d %d\n",pos_x[i],pos_y[i]);
printf("%d %d\n",pos_x[i],pos_y[i]);
} //--Tanquem el bucle "for"
}
//--Tanquem el fitxer
fclose(fitxer_rw);
}else
{
printf("Error amb el fitxer arxiu_rw\n");
}

//--Alliberem memoria
free(pos_x);
free(pos_y);
}

//DISTANCIA!!!!

{Falta un for que no me deja incluir para postear}
{
//--Reserva memoria dinamica per a la distancia
distancia=(int*)malloc(n*sizeof(int));
sprintf(fitcher_rw, "rw%d.txt", (j+1));
fitcher_rw = fopen(fitcher_rw, "r");

{Falta un for que no me deja incluir para postear}{
//--Obtenim el punt guardat al fitxer i calculem la distancia de Manhattan
fscanf(fitcher_rw,"%d %d\n", &punt_x, &punt_y);
distancia[i]=distancia_manhattan(punt_x, punt_y);
} //--Tanquem el bucle "for"

//--Tanquem el fitxer
fclose(fitcher_rw);

//--Generem el nom del fitxer a guardar
sprintf(arxiu_dist,"dist%d.txt",(j+1));

//--Obrim el fitxer i escrivim el resultat
if ((fitxer_dist = fopen(arxiu_dist, "w")) !=NULL)
{
//--Llegim tots els passos que conte el fitxer
{Falta un for que no me deja incluir para postear}{
fprintf(fitxer_dist,"%d %d\n",i,distancia[i]);

} //--Tanquem el bucle "for"

//--Tanquem el fitxer
fclose(fitxer_dist);
}
else {
printf("Error amb el fitxer arxiu_rw\n");
}

//--Alliberem memoria
free(distancia);
}

//--Demanar al usuari
printf("Voleu sortir del programa o reiniciar-lo?\n '0'=sortir, altres reiniciar\n");
scanf("%d", &sortir);

}while (sortir == 0);

return 0; //--FI
}

Muchas gracias!
Siento no poner los for però no me deja