2011-10-28 4 views
3

좋은 하루!QGraphicsScene :: ~ QGraphicsScene() 세분화 오류

#include <QCoreApplication> 
#include <QGraphicsScene> 

int main(int argc, char* argv[]) 
{ 
    // replace this with QObject app; and no problems 
    QCoreApplication app(argc, argv); 

    new QGraphicsScene(&app); 

    return 0; 
} 

어떤 아이디어 : Qt를 가진

는 :: ~ QGraphicsScene에서 QGraphicsScene() 호출을 충돌 아래 예를 4.7.3?

UPDATE :

Bug report 만들었습니다.

+0

실제 코드입니까? 새로운 QGraphicsScene (&app);)은 무엇입니까? – Bart

+0

예, 많은 단순화 후에 실제 코드입니다.이 줄은 힙에 이름이없는 개체를 만듭니다. 다른 파일이 없으며 응용 프로그램 구축에 qmake를 사용합니다. –

+0

예, 언제 'app'이 자식 개체를 삭제하는 범위를 남깁니다 - QGraphicsScene 인스턴스 –

답변

2

QGraphicsScene 인스턴스는 하나 QApplication 인스턴스의 전용 부재에 저장된리스트에 자신을 추가하고 삭제하는 경우, 또한 그리스트로부터 자신을 제거 구축하는 경우 :

QGraphicsScene::~QGraphicsScene() 
{ 
    Q_D(QGraphicsScene); 

    // Remove this scene from qApp's global scene list. 
    qApp->d_func()->scene_list.removeAll(this); 

    ... 
} 

응용 프로그램 개체가 소멸되면 상속 된 기본 클래스의 소멸자가 재귀 적으로 호출되므로 ~QApplication()은 을 호출하는 ~QCoreApplication()을 호출합니다.

실제 하위 개체 삭제는 ~QObject()에서 수행됩니다.
즉, 장면 개체가 파괴 될 때 모든 QApplication 구성원이 이미 파괴되어 있으므로 ~QGraphicsScene()이 목록에 액세스하려고하면 충돌이 발생합니다.

+0

이 가방을 신고 해 드리겠습니다. –

관련 문제