Во-первых
fprintf(fp_th,"%d ", thresh);
Обычно буферизует вывод, пока вы не закроете файл или внутренний буфер FILE * не заполнится. Вы не можете сразу увидеть вывод в файле
Вы можете выполнить fflush () ФАЙЛ *, чтобы записать его в файл, когда решите.
fprintf(fp_th,"%d ", thresh);
fflush(fp_th);
Во-вторых
printf(" check fp_th = %d \n", fp_th);
Это не проверяет, является ли fp_th
недействительным. Он просто печатает значение указателя fp_th как целое число со знаком, и значение -7323824 может быть таким же хорошим, как и любое другое значение, это будет даже менее значимым и, вероятно, неопределенным, если размер ваших указателей не совпадает с размером int.
Чтобы напечатать указатель, вы должны использовать% p
printf(" check fp_th = %p \n", fp_th);
fopen возвращает NULL в случае сбоя, вы должны проверить это, чтобы узнать, не удалось открыть файл или нет.
FILE *fp_th;
fp_th = fopen("threshold.txt", "a");
if(fp_th == NULL) {
printf("opening file failed: %s\n", strerror(errno));
return;
}