ragazzi vi posto questo problema, che da un loop nell'output fino a che non esce la scritta : segmentation fault. secondo voi da cosa è causato? Grazie.

codice:
#include<stdio.h>
#include<stdlib.h>

void mosse_cavallo(int pos_iniz[],int pos_possibili[][8]);
void controllo(int x,int y,int pos_possibili[][8]);

int main()
{ int k,i,j,pos_iniz[2],pos_possibili[2][8];
     
  printf("Inserisci la riga della posizione iniziale del cavallo:\n");
  scanf("%d",&pos_iniz[0]);
  printf("Inserisci la colonna della posizione iniziale del cavallo:\n");
  scanf("%d",&pos_iniz[1]);
  mosse_cavallo(pos_iniz,pos_possibili);
  printf("Le possibili mosse del cavallo sono:\n");
  for(j=0;j<i;j++)
    
      {printf("%d",pos_possibili[0][j]);
       printf("%d",pos_possibili[1][j]);
       printf("\n");
       
   
      } 
  
  
}
  
  
  
void mosse_cavallo(int pos_iniz[],int pos_possibili[][8])
  { int x,y;
   x=pos_iniz[0]+1;
   y=pos_iniz[1]+2;
   controllo(x,y,pos_possibili);
   x=pos_iniz[0]+1;                                                                     /* rigo 31 */
   y=pos_iniz[1]-2;
   controllo(x,y,pos_possibili);
   x=pos_iniz[0]-1;
   y=pos_iniz[1]+2;
   controllo(x,y,pos_possibili);
   x=pos_iniz[0]-1;
   y=pos_iniz[1]-2;
   controllo(x,y,pos_possibili);
   x=pos_iniz[0]+2;
   y=pos_iniz[1]+1;
   controllo(x,y,pos_possibili);
   x=pos_iniz[0]+2;
   y=pos_iniz[1]-1;
   controllo(x,y,pos_possibili);
   x=pos_iniz[0]-2;
   y=pos_iniz[1]+1;
   controllo(x,y,pos_possibili);
   x=pos_iniz[0]-2;
   y=pos_iniz[1]-1;
   controllo(x,y,pos_possibili);
   return;
}
  
void controllo(int x,int y,int pos_possibili[][8])
  {int i;
   i=0;
   if((x>=0)&&(y>=0))
      { if((x<8)&&(y<8))
           {pos_possibili[0][i]=x;
            pos_possibili[1][i]=y;
            i=i+1;}
      } 
  return;
  }