Это подзадача более серьезной проблемы, которую я опубликовал ранее. Ниже приведен фрагмент кода из пакета C++, с которым я пытаюсь работать. Цель состоит в том, чтобы записать значения в массиве float prob_estimates в выходной файл. Для некоторых, казалось бы, случайных линий записываются только некоторые из значений массива. Когда это может произойти? Как мне его отладить?В каких сценариях fprintf() не будет записываться в выходной файл
int j;
predict_label = predict_probability(model_,x,prob_estimates);
fprintf(output,"%g",predict_label);
for(j=0;j<model_->nr_class;j++) {
fprintf(output," %g",prob_estimates[j]);
fflush(output);
}
fprintf(output,"\n");
Я также хочу указать, что это, похоже, происходит только в том случае, если размер ввода довольно большой. Это часть более крупного цикла, который работает на строку входного файла (около 200 000 строк). Массив prob_estimates имеет 500 значений в строке. Выходной файл записывает менее 500 значений для некоторых 20-нечетных строк в выходном файле. Я запускал это несколько раз на подмножестве (с 20 000 строк), и все казалось прекрасным.
Обновление: Я попытался проверить возвращаемое значение fprintf после каждой попытки записи и, как оказалось, возвращает -1 для большого количества строк при попытке записать на выход.
fprintf encountered error at 19th value of line 2109359. Returned -1
fprintf encountered error at 373th value of line 2109359. Returned -1
fprintf encountered error at 229th value of line 2109360. Returned -1
fprintf encountered error at 87th value of line 2109361. Returned -1
fprintf encountered error at 439th value of line 2109361. Returned -1
Это когда я изменил код выше следующим образом:
for(j=0;j<model_->nr_class;j++) {
int e = fprintf(output," %g",prob_estimates[j]);
if (e < 0) {
printf("fprintf encountered error at %dth value of line %d. Returned %d",j ,count ,e); }
}
count
Вот это переменная, которая подсчитывает количество линии. Он увеличивается в верхней части внешнего контура (здесь не показано). Что я могу сделать, чтобы понять, почему fprintf возвращает -1?
Вы пытались создать минимальный тестовый пример? из вашего кода неясно, какой вход/выход был. –
Возможно ли, что 'model _-> nr_class' как-то отличается для тех строк, которые не выглядят правильно? – twalberg
Всегда ли это такие же 20 строк, которые не печатаются, или они меняются после каждой попытки? – jxh