我从QGraphicsScene继承了我的场景。我在这个场景中添加了很多项目(QGraphicslineItem,QGraphicsItem,QGraphicsTextItem)。每当我尝试QGraphicsSceneClear方法时,它就会在发布模式下崩溃。它在调试模式下工作正常。
注意:有些项目有子项目和/或有指向其他项目的指针,所以当我删除它们时,我会在析构函数中处理它们(删除指向其他项目的指针等)。我猜其他项目的指针使它崩溃,但我不明白为什么它只在发布模式下崩溃。
处于发布模式的调用堆栈没有用,但它确实说明了控制台上的访问冲突。
答案 0 :(得分:1)
您的问题是您的某些项目正在删除同一场景中的其他项目。调用clear()时,您无法控制(嗯,不直接)删除项目的顺序。假设您有项目A,B和C. C维护指向A和B的指针。当调用clear()时,在调用C的析构函数时,A和B可能已被删除并删除。
对于仅在发布模式下发生的崩溃,删除顺序可能取决于编译器优化的级别。这在处理悬空指针时非常常见。