我从QGraphicsScene继承了我的场景。我在这个场景中添加了许多项目(QGraphicslineItem、QGraphicsItem、QGraphicsTextItem)。每当我尝试QGraphicsSceneClear方法时,它都会在发布模式下崩溃。它在调试模式下运行良好。
注意:有些项有子项和/或有指向其他项的指针,所以当我删除它们时,我会在析构函数中处理它们(删除指向其他项等的指针)。我想指向其他项目的指针会使它崩溃,但我不明白为什么它只在发布模式下崩溃。
释放模式下的调用堆栈没有用处,但它确实在控制台上显示了访问冲突。
您的问题是您的某些项目正在删除同一场景中的其他项目。调用clear()时,您无法控制(好吧,不是直接控制)项目的删除顺序。假设您有项目A、B和C。C维护一个指向A和B的指针。当调用clear()时,当调用C的析构函数时,A和B可能已经被删除。
至于只在发布模式下发生的崩溃,删除的顺序可能取决于编译器优化的级别。这在处理悬挂指针时非常常见。