【问题标题】:QGraphicsScene::clear() method crashes only in release modeQGraphicsScene::clear() 方法仅在发布模式下崩溃
【发布时间】:2011-05-27 11:14:06
【问题描述】:

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

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

release模式下的调用栈没用,但是控制台上确实说访问冲突。

【问题讨论】:

    标签: qt debugging qgraphicsscene release-mode


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2020-04-04
      • 2021-10-22
      • 1970-01-01
      • 2018-12-31
      • 2011-01-21
      • 1970-01-01
      相关资源
      最近更新 更多