Переменная a
не инициализируется, чтобы указывать на действительный адрес памяти.
Поэтому, скорее всего, это указывает на неверный адрес памяти.
Вот один из способов исправить:
int *a = malloc(sizeof(int));
...
free(a); // when done using it
Вот еще один способ исправить:
int b;
int *a = &b;
Но я предлагаю вам выполнить следующие шаги, чтобы сделать его более простым и чистым. .
Измените это:
int *a;
К этому:
int a;
И это:
fscanf(input,"%d\n",a);
К этому:
fscanf(input,"%d\n",&a);