Здравствуйте, гость ( Вход | Регистрация )
Rocky | Дата 12.2.2010, 17:36 |
Разобрался) Если кому интересно, ща расскажу. Блин, матерился почем свет стоит.. 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, спасибо что откликнулся) |
|
kwisp | Дата 12.2.2010, 12:34 |
MediaNodePrivate это что за класс? случаем не наследник QObject ??? Если у него есть хозяин то при выходе из программы если удаляются объекты, то может хозяин повторно пытается освободить уже свободную память? зачем вообще его удалять? |
|
Rocky | Дата 11.2.2010, 23:13 |
Подскажите пожалуйста что не так? Взял пример из assistant. Написал в конструкторе класса
Когда программа загружается полностью, музыка начинает проигрывать. А вот при выходе из программы получаю ошибку: Цитата Необработанное исключение в "0x7484cb27" в "PlayStationClient.exe": 0xC0000005: Нарушение прав доступа при чтении "0x03127a00". И вылетаю в этот код (в файле medianode.cpp)
QT 4.6.1 MSVS 2008. Что не так? ( Да и еще вопрос, ведь можно же скомпилить его (Phonon) отдельно от всего остального Qt? В смысле заново не перекомпилировать все QT? |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 19.4.2024, 0:19 |