QList <internal error>, помогите |
Здравствуйте, гость ( Вход | Регистрация )
QList <internal error>, помогите |
kemiisto |
5.9.2009, 16:34
Сообщение
#1
|
Студент Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: 0 |
Здравствуйте!
Если у кого-нибудь найдётся минутка-другая, посмотрите проектик. Исходники тут. Я не стал убирать *.dll и *.a от QGLViewer'а и инклюды от QGLViewer'а и Eigen'а. Так чтоб под Windows собиралось "из коробки"... Я первый раз пишу на ++ и проект только-только начинается. Так что там много методов-пустышек и "говнокода". Собственно, беда такая. Есть у нас класс (молекула)
В Render::Viewer попытка использовать экземпляр этого класса
Попытка не совсем успешная. Когда отрабатывает конструктор Chemistry::Molecule, все 3 списка инициализируются. При попытке добавить атом в Render::Viewer::mousePressEvent в самом начале ставим точку останова: Вот. Куда то пропал incidenceMatrix_. Куда? А самое интересное. Если в объявлении поменять местами скажем так:
то на точке останова не будет уже chemistryBonds_. То есть получается: кто первым объявлен (первым инициализируется в конструкторе), тот куда-то пропадает. Немного побегал дебагом. Список портится внутри void Render::Viewer::updateMolecule(). До вызова updateGL() всё отлично, после <internal error>. А это метод (точнее слот) QGLViewer'а. Мыслей больше нет. |
|
|
Litkevich Yuriy |
5.9.2009, 17:34
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
В отладчике не смотрел, воткнул qDebug в Chemistry::Molecule::Molecule(const Chemistry::Molecule& chemistryMolecule)
запустил программу, открыл пример H2O, в консоль напечаталось:Цитата Internal debug: initializeGL() is called in QGLViewer constructor. (выделил для удобства)chemistryAtoms_ (0x54659f8, 0x62d1f00, 0x62dafa0, 0x62cf9d8, 0x6315cb0, 0x62cfd6 8, 0x62d1ac8, 0x62cefe0, 0x62c1298, 0x62ce8c0, 0x6305a58, 0x62cf610, 0x62d07f0, 0x62d1cf0, 0x62d2668, 0x62d2010, 0x62d2480, 0x62d4f48, 0x62d1918, 0x62d1450, 0x6 2cfb88, 0x62cff78, 0x62d04f8, 0x62d06e0) chemistryBonds_ (0x62ca5b8, 0x6315ec8, 0x62cc1d8, 0x62ce218, 0x62d0f80, 0x631f36 0, 0x62b6f88, 0x62b6db8, 0x6315258, 0x546a2c0, 0x546b2d8, 0x63159a8, 0x63152b8, 0x54659e0, 0x631f9d0, 0x62fffc8, 0x546aca8, 0x631f950, 0x631f990, 0x631f9e8, 0x6 31f5d0, 0x631fa78, 0x62b2ee8, 0x62b90c8, 0x631f540) incidenceMatrix_ ((0x62ca5b8, 0x6315ec8, 0x62cc1d8) , (0x62ce218, 0x62d0f80) , (0x631f360, 0x62b6f88, 0x62b6db8) , (0x6315258, 0x546a2c0, 0x546b2d8) , (0x62 ca5b8, 0x63159a8, 0x63152b8) , (0x62ce218, 0x631f360, 0x63159a8) , (0x6315ec8, 0x62d0f80, 0x54659e0) , (0x6315258, 0x63152b8, 0x631f9d0) , (0x62b6f88, 0x546 a2c0, 0x62fffc8) , (0x546b2d8, 0x546aca8, 0x631f950, 0x631f990) , (0x62b6db8, 0x631f9e8, 0x631f5d0, 0x631fa78) , (0x62cc1d8, 0x62b2ee8, 0x62b90c8, 0x631f540) , (0x631f9d0) , (0x62fffc8) , (0x54659e0) , (0x546aca8) , (0x631f950) , ( 0x631f990) , (0x631f9e8) , (0x631f5d0) , (0x631fa78) , (0x62b2ee8) , (0x62b 90c8) , (0x631f540) ) charge_ 0 Т.е. неинициализированных значений нет. Может помогалка для отладчика (в Креаторе) глючит? П.С. Малекула прикольно крутится, надо будет разобратся с такими штуками |
|
|
kemiisto |
5.9.2009, 18:18
Сообщение
#3
|
Студент Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: 0 |
Litkevich Yuriy, спасибо, что не бросаете в беде!
Может помогалка для отладчика (в Креаторе) глючит? Хм... Врядли. Оно падает при попытке добавить атом в Render::Viewer::mousePressEvent. Сначала импортируем молекулу, потом пытаемся добавить атом. Доходит до
идёт в else веточку и падает на addAtom(). Или чуть ниже на updateMolecule(). Так как к этому моменту один из QList в составе Chemistry::Molecule "побит". Бъётся при updateGL(). Какой - зависит от порядка объявления. Вот... |
|
|
Litkevich Yuriy |
5.9.2009, 18:21
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kemiisto |
5.9.2009, 18:32
Сообщение
#5
|
Студент Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: 0 |
объясни как это в программе сделать (куда кликать?). OK. Сначала Job - Dalton Input. Выбираем последовательно H2O.dal, затем, скажем, caffeine.mol. Видим молекулу. Справа в тулбоксе переходим на вкладку Add. Жмакаем внутри вьювера по пустому месту (мимо атомов). Должен добавится атом (пока прям в начало координат). Но... =( |
|
|
Litkevich Yuriy |
5.9.2009, 18:53
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kemiisto |
5.9.2009, 19:01
Сообщение
#7
|
Студент Группа: Участник Сообщений: 27 Регистрация: 5.9.2009 Из: Осло, Норвегия Пользователь №: 1054 Спасибо сказали: 2 раз(а) Репутация: 0 |
Добавился, а соединения между атомами исчезли Ага. Такое тоже возможно. Портится список, объявленный первым в Chemistry::Molecule. Сейчас это список связей (QList<Chemistry::Bond*> chemistryBonds_;). Он не обязательно становится недоступным (<internal error>). Иногда оттуда просто исчезают элементы, иногда их там становится бесконечно много. Как бы то ни было, портится список. |
|
|
kwisp |
5.9.2009, 19:09
Сообщение
#8
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
kemiisto,
то что кто первый в объявлении класса тот и "портится" это вполне возможно где то в программе на память "наступил". ПС. тоже интересно не могу проект открыть чего то архив сопротивляется. |
|
|
Litkevich Yuriy |
5.9.2009, 19:12
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
kwisp |
5.9.2009, 19:31
Сообщение
#10
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
kemiisto,
вот так не стоит писать.. в этом конструкторе каждый лист создается по 2 раза(если лист имеет конструктор по умолчанию без аргументов). не знаю, может с оператором присваивания у тебя в классе не лады ты во вьюер устанавливаешь молекулу в setMolecul(...) т.е. chemistryMolecul_ у тебя уже инициализирован конструктором по умолчанию в конструкторе вьюера( листы пустые там). ну попробуй так
Сообщение отредактировал kwisp - 5.9.2009, 19:58 |
|
|
Текстовая версия | Сейчас: 19.4.2024, 5:36 |