Qt QGraphicscene::clear()方法仅在发布模式下崩溃

Qt QGraphicscene::clear()方法仅在发布模式下崩溃,qt,debugging,qgraphicsscene,release-mode,Qt,Debugging,Qgraphicsscene,Release Mode,我从QGraphicscene继承了我的场景。我在这个场景中添加了许多项目(QGraphicslineItem、QGraphicsSitem、QGraphicsTextItem)。每当我尝试QGraphicsCeneClear方法时,它都会在发布模式下崩溃。它在调试模式下工作良好 注意:某些项具有子项和/或指向其他项的指针,因此当我删除它们时,我会在析构函数中处理它们(删除指向其他项的指针等)。我猜指向其他项目的指针会使它崩溃,但我不明白为什么它只在发布模式下崩溃 释放模式下的调用堆栈没有用处,

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

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


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

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


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

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

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