| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > fread не читает весь блок данных |
| Автор: ksili 10.6.2014, 07:01 | ||||
| Пишу парсер WAV-файлов (под Linux, но это неважно). Т.е. прога должна считывать все чанки и выводить их название и размер. В общем-то всё это работает. Читаем каждый заголовок чанка в структуру, парсим, выводим инфу, перескакиваем к следующему чанку и т.д. Неполадки начались, когда я решил чанк data (самый большой, в котором звуковые данные) не проскакивать (при помощи fseek), а читать в массив (при помощи fread), чтобы потом чего-нибудь с ним делать. Делаю в общем-то просто: выделяю массив уже известной мне длины и читаю fread'ом в него. Но считывается всегда меньше данных, чем запрошено. Код этого места такой:
Тестирую на файлах размера 100-400 Кб, т.е. ничего особенного. printf'ы про позицию в файле добавил, уже когда отлаживался, чтобы проверить, реально останавливается на середине блока данных или нет? Вывод например такой:
Всегда попадаю на ferror. К сожалению, насколько я понял, ferror не позволяет выяснить, что именно за ошибка произошла. Я сначала грешил на то, что у меня Linux 64-bit стоит в виртуалке. Но я пересобрал под винду (MS VS, 32-bit) не на виртуалке. Ошибка сохраняется. Только количество реально прочитанных байт другое стало. Вообще, это количество всегда одинаково, т.е. это не какая-то блуждающая ошибка, а что-то стабильное. В чем может быть проблема? |
| Автор: ksili 10.6.2014, 07:23 | ||
| Вот за что я люблю форумы, так это за то, что при попытке написать обстоятельный вопрос, сам доходишь до ответа. Оказывается, при выделении памяти допущена ошибка - скобки не те. Надо так:
Вот только, блин, почему ни один из двух компиляторов не подсказал мне, что тут фигня какая-то написана? |
| Автор: ksili 10.6.2014, 09:58 |
| borisbn, спасибо. Ну вот никому довериться нельзя |