Утверждение приходит из файла с именем feoferr.c . Это говорит о том, что это как-то связано с функцией feof
. Утверждение говорит, что ожидалось stream != NULL
. Утверждение не удалось, поэтому stream
, очевидно, является нулевым указателем. Поскольку feof
принимает параметр файлового потока, можно с уверенностью предположить, что поток, о котором упоминается в сообщении подтверждения, является параметром файлового потока. Вы звоните feof
так:
// open the input file
salesFile = fopen("sales.dat", "r");
// read all record in the input file
while (!feof(salesFile)) {
Так что, возможно, salesFile
- нулевой указатель. Как вы знаете, это может произойти, когда fopen
не удается открыть файл. Возможно, файл не существует или у вас нет доступа к нему для чтения.
В следующий раз, когда вы столкнетесь с ошибкой, используйте инструменты, которые у вас есть перед вами. У вас есть отладчик, и он должен прервать вашу программу, когда она завершится таким образом. Это может привести вас к линии, которая потерпела неудачу, или к линии, ближайшей к ней. Это должно было дать вам подсказку, что проблема была где-то вскоре после того, как вы позвонили fopen
. Начни там расследование.
Установите точки останова в коде позже, чем там, и посмотрите, доберетесь ли вы до них до сбоя вашей программы. Если вы не заходите так далеко, не включайте эти функции при публикации вопроса. Не пытайтесь найти потенциальных помощников с большим количеством ненужного кода, чтобы разобраться, просто чтобы разобраться с реальной проблемой.
Если у вас есть проблема, убедитесь, что ваши функции возвращают значения, которые вы ожидаете от них. Если вы не знаете, чего ожидать от них, прочитайте документацию и проведите несколько экспериментов. Убедитесь, что вы понимаете весь код, который вы написали.