краш программы при использовании Phonon |
Здравствуйте, гость ( Вход | Регистрация )
краш программы при использовании Phonon |
Rocky |
11.2.2010, 23:13
Сообщение
#1
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Подскажите пожалуйста что не так?
Взял пример из assistant. Написал в конструкторе класса
Когда программа загружается полностью, музыка начинает проигрывать. А вот при выходе из программы получаю ошибку: Цитата Необработанное исключение в "0x7484cb27" в "PlayStationClient.exe": 0xC0000005: Нарушение прав доступа при чтении "0x03127a00". И вылетаю в этот код (в файле medianode.cpp)
QT 4.6.1 MSVS 2008. Что не так? ( Да и еще вопрос, ведь можно же скомпилить его (Phonon) отдельно от всего остального Qt? В смысле заново не перекомпилировать все QT? |
|
|
kwisp |
12.2.2010, 12:34
Сообщение
#2
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
MediaNodePrivate
это что за класс? случаем не наследник QObject ??? Если у него есть хозяин то при выходе из программы если удаляются объекты, то может хозяин повторно пытается освободить уже свободную память? зачем вообще его удалять? |
|
|
Rocky |
12.2.2010, 17:36
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: 7 |
Разобрался) Если кому интересно, ща расскажу.
Блин, матерился почем свет стоит.. 3 часа угробил ) но понял в чем фишка.. Вобщем, я посмотрел адреса указателей (m_backendObject и его parent-a) в момент создания... а потом в момент удаления.. Они почему-то оказались разные. Соответсвенно первая мысль была что их кто-то или что-то затирает. И причем происходит этот в момент выхода, т.к. музыка-то играет "до последнего". Поставил брэйкпоинт в деструктор класса и в функцию удаления этого backendObject, думаю может что увижу... Каково же было мое удивление, когда я не провалился по этому брэйкпоинту в моем деструкторе и попал почему-то сразу к удалению backendObject (которое как я понимаю должно происходить уже после того, как я выйду из деструктора, потому что QT удаляет все созданные объекты-наследники от QObject уже при выходе из eventLoop-а). Причем этот мой класс - наследник от QMainWidget (тут мне сразу стало понятно почему не вызываются деструкторы самописных кнопок, о чем я тут недавно спрашивал). Долго не мог понять что за фигня... В конце концов выяснил (точнее вспомнил), что я запретил выход из программы кроме как по нажатию кнопки "выйти". А в ней стоял вызов exit(0). Сунулся в assistant... читал-читал нашел интересное: Цитата void QCoreApplication::quit () [static slot] Tells the application to exit with return code 0 (success). Equivalent to calling QCoreApplication::exit(0). Попробовал поставить qApp->quit() моментально попал к себе в деструктор. И все встало на свои места. Отработал деструктор, совершенно нормально удалился backendObject и все. Сталобыть exit(0) и qApp->exit(0) не одно и тоже. Хотя по обоим происходит выход из программы.. Только в первом случае непонятно что вообще происходит... И еще непонятно, exit(0) это какой? QEventLoop::exit или QThread::exit? Явно не QCoreApplication::exit раз он эквивалентен quit (с 0-м кодом) Да, и еще возник вопрос про phonon.. хотя нет, лучше в другом треде это спросить) kwisp, спасибо что откликнулся) Сообщение отредактировал Rocky - 12.2.2010, 17:39 |
|
|
Текстовая версия | Сейчас: 28.12.2024, 19:05 |