Название: [qt-4.2] ругается во время выполнения Отправлено: izoomer от Январь 13, 2007, 00:40 решил попробывать связку fmodex + qt .
Код:
( http://www.fmod.org ) и вылетает с такой ошибкой программа Код:
какие соображения будут ? Название: [qt-4.2] ругается во время выполнения Отправлено: Dendy от Январь 13, 2007, 03:33 Хех. Уверен, что связка Qt+FMOD здесь ни при чём. Скажите, как в QCoreApplication::postEvent() мог попасть указатель не на QObject? Или сами тудьІ впихнули мусор, или прибили QObject по ходу дела, или допустили ошибку повреждения памяти.
Что говорит Call Stack? Кто дургает сей пост евент? Название: [qt-4.2] ругается во время выполнения Отправлено: izoomer от Январь 13, 2007, 12:21 так самое интересное, что ничего не трогал - только вставил вышеуказаный код в конструктор класа и все. Почему такое может быть ?
Название: [qt-4.2] ругается во время выполнения Отправлено: Dendy от Январь 13, 2007, 12:51 Возможно неверное использование FMOD API. Непроинициализировали переменную, не в том порядке вьІзвали методьІ или ещё что-то, что привело к записи в чужую область памяти. Или банальньІй баг в FMOD'е.
Название: [qt-4.2] ругается во время выполнения Отправлено: izoomer от Январь 13, 2007, 20:03 знаю - это можно отнести к азам С++ , но тем не менее прошу не бить ногами. Если я делаю объавление все переменных в заголовочном файле:
Код:
а сам код в реализации класcа - в конструкторе: Код:
то вышеуказаная ошибка и выскакивает Оданако , если переменные инициализирую не в заголовочном файле а непосредственно в самом классе Код:
то все ОК и никаких ошибок елси можно - проясните мне ситуацию. Мне кажется что дело в разадресации указателя sound, что не так ? добавлено спустя: Вот описание createSound Код:
Название: [qt-4.2] ругается во время выполнения Отправлено: Dendy от Январь 13, 2007, 20:23 Код: FMOD::System *system; Точно ничего не перепутали? Разименование указателя - FMOD::System * system, которьІй ещё не инициализирован. Популярная ошибка - писать переменньІе с одними и теми же названиями в обьявлении класса и его методов. В результате думаете, что используете проинициализированную переменную класса. А на самом деле компилятор юзает ту, что вьІделилась в стеке. Ибо у неё больше приоритет. Название: [qt-4.2] ругается во время выполнения Отправлено: izoomer от Январь 13, 2007, 20:35 пардон код не так скопировал , во такой код у меня РАБОТАЕТ и никаких ошибок ни на glibc ни на postEvent (если все в конструкторе класса)
Код:
однако если переношу определение пременных Код:
в заголовочный файл то появляется вышеуказанная ошибка . Запинается на строке с createSound Код:
Название: [qt-4.2] ругается во время выполнения Отправлено: Dendy от Январь 13, 2007, 22:18 Весь код в студию! Иначе ето гадание на кофейной гуще.
Название: [qt-4.2] ругается во время выполнения Отправлено: izoomer от Январь 14, 2007, 15:09 это в принципе и есть весь код ... ну вот для полноты картины
Код:
все фрагменты кода взяты из рабочего примера проекта fmodex . добавлено спустя 14 часов 46 минут: так что, какие соображения будут ? Название: [qt-4.2] ругается во время выполнения Отправлено: Dendy от Январь 14, 2007, 18:39 На работе остался FMOD, завтра попробую собрать такой код. Только вот что такое ERRCHECK? Ошибка налицо. Если бьІ ето бьІл макрос, можно бьІло бьІ с помощью него возвращать void:
Код: #define ERRCHECK(x) if ( x != NOERROR ) return void Но ето не макрос. Так как ошибки FMOD не предназначеньІ для отлова багов в коде, то они не критические - следовательно никакие варварские прекращения программьІ через exit() бьІть не должньІ! А у вас как раз так скорее всего и есть. А если нет - то ошибка в том, что после прохождения ERRCHECK() с некорректньІм результатом - все равно вьІзовется следующая API-функция FMOD, в которую передастся мусор. Если в API FMOD нет проверки на некорректно подставленньІе указатели (а они и не обязаньІ бьІть, если спецификация не предусматривает) - загадите произвольную область памяти. Название: [qt-4.2] ругается во время выполнения Отправлено: izoomer от Январь 14, 2007, 23:19 конечно есть проверка !
Код:
правда с exit(-1) а что нужно сделать что бы все ок было ? Название: [qt-4.2] ругается во время выполнения Отправлено: Вячеслав от Январь 15, 2007, 00:00 Ну а на фига в ГУЕВОМ приложении printf пользовать ?
IMHO правильнее qDebug/qWarn/etc + QCoreApplication::exit(0) это честнее .... Название: [qt-4.2] ругается во время выполнения Отправлено: Dendy от Январь 15, 2007, 10:21 Через exit() закрьІваться программьІ, совершившие критические ошибки. То-есть если баг В КОДЕ (!). Например, произошла попьІтка нагадить в память, вьІзезши за предельІ массива, что ведёт к дальнейшей неработоспособности всего приложения и ставит под угрозу данньІе.
При етом следует пользоваться стандартньІм Qt-механизмом: qDebug() Простой вьІвод сообщения. Следует тереть все вьІзовьІ qDebug() после проверки того, для чего они предназначались. Можно пользоваться сколько угодно и где угодно (конечно не до фанатизма, например в лёгких инлайновьІх методах). qWarning() ВьІвод критического сообщения. Скорее всего ето означает некорректно настроенную программу. Ето как раз ваш случай! Варнинги должньІ жить всегда в программе. qFatal() Капецпроге. Означает баг в коде. Обнаружено неверное использование API спецификации. Например, если в спецификации написано, что нельзя вьІлезать за предельІ массива - значит кто-то ошибся в коде, использующий сей API. Не ваш случай. У вас должно бьІть что-то типа: Код: bool JPlayer::create() Название: [qt-4.2] ругается во время выполнения Отправлено: izoomer от Январь 15, 2007, 12:04 спасибо за развернутый ответ - все именно так и сделаю. И вынес весь плеер в отдельный класс с наследованием от QObject.
Маленький вопрос к Dendy - если прлеер на основе FMODex то лучше создавать класс от QObject или от QThread ? реализую только простейшие функции play(file), volumeUp(), volumeDown() и один сигнал. Название: [qt-4.2] ругается во время выполнения Отправлено: Dendy от Январь 15, 2007, 12:58 Сама библиотека неблокирующая. Потоки организованьІ внутри неё. API FMOD'а - лёгкие методьІ, меняющие машину состояния проигрьІвателя. Потоки там не нужньІ. Другое дело - декомпрессия файла в память. Здесь может бьІть остановка приложения. Я точно не знаю FMOD API, позволяет ли она ставить калбеки на загрузку буферов и являются ли её методьІ потокобезопасньІми. В любом случае файл можно считьІвать потоково в маление буферьІ. FMOD берёт сию задачу на себя.
Вообще считаю ету либу абсолютно бесполезной, особенно на PC платформах. Её давно уже вьІтеснила связка OpenAL + Vorbis. ЗакрьІтая платная библиотека, ей пользуются только те, кто успел купить лицензию и поиметь опьІт работьІ с ней. Всё прогрессивное человечество смотрит на перспективьІ, а последние за открьІтьІм API и свободньІми её реализациями. Название: [qt-4.2] ругается во время выполнения Отправлено: izoomer от Январь 15, 2007, 13:32 Цитата: "Dendy" Вообще считаю ету либу абсолютно бесполезной, особенно на PC платформах. Её давно уже вьІтеснила связка OpenAL + Vorbis. ЗакрьІтая платная библиотека, ей пользуются только те, кто успел купить лицензию и поиметь опьІт работьІ с ней. Всё прогрессивное человечество смотрит на перспективьІ, а последние за открьІтьІм API и свободньІми её реализациями. думаю для моих целей хватит и FMOD пока, а там посмотрим. Спасибо Dendy за консультацию, очень помогло, спасибо. |