Название: Segmentation fault при итерации QGraphicsItemGroup.childItems() Отправлено: Mist1K от Июнь 20, 2014, 10:24 Делаю игру в которой надо складывать картинку из частей. При стыковке двух элементов наследников класса QGraphicsItem объединяю их в класс наследник QGraphicsItemGroup. При перемещении группы каждому члену группы меняю координаты для отслеживания их позиции на сцене, при этом иногда получаю вылет "Segmentation fault" :( и не вижу где косяк, помогите пожалуйста разобраться.
main.cpp Код: #include "mygi.h" mygi.h Код: #ifndef MYGI_H mygi.cpp Код: #include "mygi.h" mygig.h Код: #ifndef MYGIG_H mygig.cpp Код: #include "mygig.h" PS: Буду благодарен за любые предложения, замечания, советы. Название: Re: Segmentation fault при итерации QGraphicsItemGroup.childItems() Отправлено: Bepec от Июнь 20, 2014, 10:46 QGraphicsItemGroup::mouseReleaseEvent(event);
А вы уверены что после этой строчки event уже не удалён? :) Название: Re: Segmentation fault при итерации QGraphicsItemGroup.childItems() Отправлено: Mist1K от Июнь 20, 2014, 11:04 QGraphicsItemGroup::mouseReleaseEvent(event); А вы уверены что после этой строчки event уже не удалён? :) Да я на самом деле мало в чем уверен) Среду разработки Qt использую впервые и изучаю по ходу необходимости. Код: void MyGIG::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { перестановка мест слагаемых сумму не изменило( Название: Re: Segmentation fault при итерации QGraphicsItemGroup.childItems() Отправлено: Bepec от Июнь 20, 2014, 11:21 Вы ещё пару раз строчки поменяйте, мб поможет? :D Издеваюсь конечно, извините :)
Проверку там сделайте на NULL. PS и вообще хватит ребячиться - breakpoint тудыть и пошагово смотрите что происходит и проверяй всё. Хотя б место вылета уточните. Название: Re: Segmentation fault при итерации QGraphicsItemGroup.childItems() Отправлено: Swa от Июнь 20, 2014, 11:38 Вообщем, я опытным путем выяснил, что список, полученный через childItems() - одноразовый, и при вызове этого метода старые указатели на детей, полученные этим методом, инвалидируются.
Такой код работает: Код: QList<QGraphicsItem*> list = childItems(); Название: Re: Segmentation fault при итерации QGraphicsItemGroup.childItems() Отправлено: Mist1K от Июнь 20, 2014, 11:45 Вообщем, я опытным путем выяснил, что список, полученный через childItems() - одноразовый, и при вызове этого метода старые указатели на детей, полученные этим методом, инвалидируются. Спасибище! Уж не знаю сколько я бы еще ковырялся без вашей помощи... Название: Re: Segmentation fault при итерации QGraphicsItemGroup.childItems() Отправлено: GreatSnake от Июнь 20, 2014, 14:48 Вообщем, я опытным путем выяснил, что список, полученный через childItems() - одноразовый, и при вызове этого метода старые указатели на детей, полученные этим методом, инвалидируются. А без опытов просто взять и посмотреть прототип функции? |