I am pretty new to programming and I am getting a segmentation fault and I have no idea where this is happening.

Code:#include <stdio.h> #include <stdlib.h> #define FIELDWIDTH 3 //The width of the hopscotch field. FILE *in; //Pointer to files FILE *out; int max_score(int *tally_row, int middle_index); int** alloc_no_of_marbles(int field_length, int fieldWidth); int** alloc_score_of_each_square(int field_length, int fieldWidth); int main(void) { char inFileName[] = "hopscotch.dat"; //Open files for reading char outFileName[] = "hopscotch.out"; int field_length, i, j; fscanf(in, "%d", &field_length); int **no_of_marbles = alloc_no_of_marbles(field_length, FIELDWIDTH); int **score_of_each_square = alloc_score_of_each_square(field_length, FIELDWIDTH); for(i=0; i<field_length; i++) { for(j=0; j<FIELDWIDTH; j++) { fscanf(in, "%d", &no_of_marbles[i][j]); } } for(i=0; i<field_length; i++) { for(j=0; j<FIELDWIDTH; j++) { score_of_each_square[i][j] = ( ((i-1) < 0) ? 0 : score_of_each_square[i-1][max_score(score_of_each_square[i-1],j)] ) + no_of_marbles[i][j]; } } int path_score = score_of_each_square[field_length-1][max_score(score_of_each_square[field_length-1],1)]; char hop_path[field_length+1]; int current_row = field_length, current_pos = 1, previous_pos; for(i=current_row; i>=0; i--) { if(i==0) previous_pos = 1; else previous_pos = max_score(score_of_each_square[i-1], current_pos); switch(current_pos - previous_pos){ case -1: hop_path[i] = 'L'; break; case 0: hop_path[i] = 'D'; break; case 1: hop_path[i] = 'R'; break; } current_pos = previous_pos; } fprintf(out, "Maximum possible score: %d\n", path_score); fprintf(out, "A path that achieves this score: "); for(i=0; i<=field_length; i++) fprintf(out, "%c", hop_path[i]); fprintf(out, "\n"); return 0; } int max_score(int* tally_row, int middle_index){ int k, value = 0, max_value_index = -1; for(k=middle_index-1; k<=middle_index+1; k++) { if(k >= 0 && k < FIELDWIDTH) if(tally_row[k] > value) { value = tally_row[k]; max_value_index = k; } } return max_value_index; } int **alloc_no_of_marbles(int field_length, int fieldWidth) { int **hopArr; int *aux1; int i, j; aux1 = (int *) malloc(field_length*fieldWidth*sizeof(int)); if (aux1 == NULL) exit(1); hopArr = (int **) malloc(field_length*sizeof(int *)); if(hopArr == NULL) exit(1); for(i=j=0; i<field_length; i++, j+=fieldWidth) hopArr[i] = &aux1[j]; return hopArr; } int **alloc_score_of_each_square(int field_length, int fieldWidth) { int **talArr; int *aux2; int i, j; aux2 = (int *) malloc(field_length*fieldWidth*sizeof(int)); if (aux2 == NULL) exit(1); talArr = (int **) malloc(field_length*sizeof(int *)); if(talArr == NULL) exit(1); for(i=j=0; i<field_length; i++, j+=fieldWidth) talArr[i] = &aux2[j]; return talArr; }