Название: Создание пользовательских widget-ов Отправлено: swizar от Май 04, 2006, 16:16 Добрый всем день.
Сразу о версиях: - linux = qt-3.1 (стандартная поставка в RedHat 9) - win = qt-win-commercial-3.3.5 (скачана по наводке с этого форума очень классно, без всяких проблем встала :D ). Появился у меня один вопрос, следующего плана: Надоело набирать в диалогах кучу виджетов и разгребать их потом. Решил для себя написать пару виджетов со своей спецификой, в виде плагинов и встроить их в дизайнер, что бы потом просто таскать на формы. Но вот с Windows получилась незадача, дизайнер падает с сообщением типа "инструкция по адресу .... обратилась к памяти по адресу ... Память не может быть прочитана". Как я надеюсь понятно, сам плагин собрался без проблем и ошибок, и даже лег куда надо. Т.е. в дизайнере я его наблюдаю, могу стащить на форму, отредактировать свойства. Но после первого же просмотра формы, дизайнер падает. Если кто сталкивался с подобной штукой подскажите в чем проблема. В Linux тот же проект собирается и работает без проблем. Код не привожу не из жадности, просто мне кажется не в нем дело. Название: Создание пользовательских widget-ов Отправлено: Hordi от Май 04, 2006, 19:38 Попробуй максимально упростить свой виджет, вплоть до того, что будет состоять только из родительского класса. Если прокатит, то плавно ищи ошибку у себя.
Не обязательно если в линуксе работает, то в винде долно быть также, может просто везет. Есть такое понятие - неопределенное поведение, так и тут может быть - 100 раз запустишь вроде нормально, а на сто первый - получай сигфолт! Название: Создание пользовательских widget-ов Отправлено: Grigory от Май 05, 2006, 09:13 Возможно это связано с установкой фокуса или таб-ордера для твоего виджета. Так же может быть это баг в самой версии qt (3.3.5). У меня в похожей ситуации (alt linux, qt 3.3.3 ) все работает, а под Linux Mandriva 2006 qt 3.3.5 вылет сразу или при нажатии Tab. В чем дело, я пока не разобрался и когда руки до этого дойдут, не знаю.
Название: Создание пользовательских widget-ов Отправлено: swizar от Май 05, 2006, 10:26 Снимаю вопрос. Спасибо за отклик.
Проблема была в следующем: Код:
Это конечно ошибка, но gcc ее проглотил. Да и вообще, на сколько я себе предсталял это не должно приводить к краху программы. Название: Создание пользовательских widget-ов Отправлено: Sergeich от Май 05, 2006, 10:53 Цитата: "swizar" Это конечно ошибка, но gcc ее проглотил. Да и вообще, на сколько я себе предсталял это не должно приводить к краху программы. Еще как должно и еще как приводит. :D В С++ указатель на удаляемый объект не обнуляется. Если б ты написал Код:
никакой ошибки не возникло бы. А так после второго delete освобождается кусок памяти по адресу button1 размером sizeof(QPushButton), а в этой памяти может находится что угодно, в результате программа может грохнуться хрен знает в каком месте. Название: Создание пользовательских widget-ов Отправлено: Hordi от Май 05, 2006, 11:21 Как я угадал с неопределенным поведением :)
В стандарте C++ повторное удаление удаленного объекта как раз и приводит к неопределенному поведению. |