Метод QGraphicsScene :: clear () падает только в режиме релиза - PullRequest
1 голос
/ 27 мая 2011

Я унаследовал свою сцену от QGraphicsScene. Я добавляю много элементов (QGraphicslineItem, QGraphicsItem, QGraphicsTextItem) на эту сцену. Всякий раз, когда я пробую метод QGraphicsSceneClear, он падает в режиме выпуска. Он отлично работает в режиме отладки.

Примечание: Некоторые элементы имеют дочерние элементы и / или имеют указатели на другие элементы, поэтому при их удалении я обрабатываю их в деструкторе (удаление указателей на другие элементы и т. Д.). Я полагаю, что указатели на другие элементы вызывают сбой, но я не понимаю, почему происходит сбой только в режиме выпуска.

Стек вызовов в режиме выпуска бесполезен, но он говорит о нарушении прав доступа в консоли.

1 Ответ

1 голос
/ 27 мая 2011

Ваша проблема в том, что некоторые ваши элементы удаляют другие элементы в той же сцене.У вас нет контроля (ну, не напрямую) порядка удаления элементов при вызове clear ().Допустим, у вас есть элементы A, B и C. C поддерживает указатель на A и B. Когда вызывается clear (), A и B могут быть уже удалены и удалены при вызове деструктора C.

Поскольку сбой происходит только в режиме выпуска, порядок удаления может зависеть от уровня оптимизации компилятора.Это часто встречается при работе с висящим указателем.

...