1

我从 QGraphicsScene 继承了我的场景。我在这个场景中添加了许多项目(QGraphicslineItem、QGraphicsItem、QGraphicsTextItem)。每当我尝试 QGraphicsSceneClear 方法时,它都会在发布模式下崩溃。它在调试模式下工作正常。

注意:有些项目有子项目和/或有指向其他项目的指针,所以当我删除它们时,我会在析构函数中处理它们(删除指向其他项目的指针等)。我猜指向其他项目的指针使它崩溃,但我不明白为什么它只在发布模式下崩溃。

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

4

1 回答 1

1

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

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

于 2011-05-27T13:56:00.173 回答