![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ksili |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Пишу парсер WAV-файлов (под Linux, но это неважно). Т.е. прога должна считывать все чанки и выводить их название и размер.
В общем-то всё это работает. Читаем каждый заголовок чанка в структуру, парсим, выводим инфу, перескакиваем к следующему чанку и т.д. Неполадки начались, когда я решил чанк data (самый большой, в котором звуковые данные) не проскакивать (при помощи fseek), а читать в массив (при помощи fread), чтобы потом чего-нибудь с ним делать. Делаю в общем-то просто: выделяю массив уже известной мне длины и читаю fread'ом в него. Но считывается всегда меньше данных, чем запрошено. Код этого места такой:
Тестирую на файлах размера 100-400 Кб, т.е. ничего особенного. printf'ы про позицию в файле добавил, уже когда отлаживался, чтобы проверить, реально останавливается на середине блока данных или нет? Вывод например такой:
Всегда попадаю на ferror. К сожалению, насколько я понял, ferror не позволяет выяснить, что именно за ошибка произошла. Я сначала грешил на то, что у меня Linux 64-bit стоит в виртуалке. Но я пересобрал под винду (MS VS, 32-bit) не на виртуалке. Ошибка сохраняется. Только количество реально прочитанных байт другое стало. Вообще, это количество всегда одинаково, т.е. это не какая-то блуждающая ошибка, а что-то стабильное. В чем может быть проблема? Это сообщение отредактировал(а) ksili - 10.6.2014, 07:04 -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
||||
|
|||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
Вот за что я люблю форумы, так это за то, что при попытке написать обстоятельный вопрос, сам доходишь до ответа.
Оказывается, при выделении памяти допущена ошибка - скобки не те. Надо так:
Вот только, блин, почему ни один из двух компиляторов не подсказал мне, что тут фигня какая-то написана? -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Потому, что это - не фигня. Ты выделил память под один char и проинициализировал его значением dataChunkLen. А вот за что действительно можно поругать компилятор, так это за то, что он не спрашивая твоего мнения привёл тип переменной dataChunkLen (скорее всего unsigned int) к char, потеряв при этом три значащих байта и не сказав ни слова -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| ksili |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2069 Регистрация: 3.11.2005 Где: Красноярск Репутация: 1 Всего: 17 |
borisbn, спасибо.
Ну вот никому довериться нельзя -------------------- Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с) |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |