2011-05-27 60 views
1

我从QGraphicsScene继承了我的场景。我在这个场景中添加了很多项目(QGraphicslineItem,QGraphicsItem,QGraphicsTextItem)。每当我尝试QGraphicsSceneClear方法它崩溃在发布模式。它在调试模式下工作正常。有些项目有子项目和/或有其他项目的指针,所以当我删除它们时,我在析构函数中处理它们(删除指向其他项目的指针等)。我猜其他项目的指针使它崩溃,但我不明白为什么它崩溃只在发布模式。QGraphicsScene :: clear()方法仅在发布模式下崩溃

释放模式下的调用堆栈没有用,但它确实在控制台上表示访问冲突。

回答

1

你的问题是你的一些项目正在删除同一场景中的其他项目。调用clear()时,您无法控制(不是直接)删除项目的顺序。假设你有项目A,B和C. C维护一个指向A和B的指针。当clear()被调用时,A和B可能在C的析构函数被调用时已经被移除和删除。

至于只发生在发布模式下的崩溃,删除顺序可能取决于编译器优化的级别。处理悬挂指针时这很常见。

相关问题