Pithon exit code -1073740771 (0xC000041D)

Рейтинг: -1Ответов: 1Опубликовано: 28.03.2023

Вводные: Win 10 64bit, Python 3.9, PyQt5, Gui. Программа завершается с exit code -1073740771 (0xC000041D) В трассировке никаких ошибок не выводится. Можно ли как то выловить это исключение с помощью try-except?

Из наблюдений: приблизительный фрагмент кода, в котором сидит проблема, выявил. Но он выполняется без ошибок. В режиме отладки построчно выполнял код и после проблемного участка он тоже нормально выполняется. Но когда все строки кода в проблемной функции выполнены - скидывает на exit(App.exec())

Дополнение от 29.03.2023: заметил что вылет происходит после смены иерархии/родителей QGraphicsPixmapItem. Но не в момент смены, а по завершении любой из функций, в которой происходит эта смена иерархии. Так как код после переназначения родителя выполняется до конца функции.

Дополнение от 10.04.2023: В windows данный код говорит STATUS_ACCESS_VIOLATION, что означает The instruction at 0x%08lx referenced memory at 0x%08lx. The memory could not be %s. В моем случае.

Проще говоря - проблемы с обращением к ячейкам памяти. Допускаю, что они связаны со сборщиком мусора, но вероятнее всего с удалением объектов, являющихся родительскими по отношению к другим.

В коде есть функция, удаляющая итемы из сцены, при их удалении удаляются соответственно и их дочерние итемы. Предполагаю, что PyQt5 по каким то причинам не выводит ошибку в отладчик, когда удаляется итем уничтоженный ранее вместе с родителем. И прога падает. То есть невозможно обращение к адресу памяти, который уже не существует. Надеюсь, осталось понять каким образом определить какие итемы в сцене присутствуют (были добавлены методом additem).

Ответы

▲ 0

Решение в данном случае:

Не считаю этот способ решением общей проблемы exit code -1073740771 (0xC000041D), но в конкретном случае это действительно решение.

Вычитал на англоязычных ресурсах решение. Такое падение программы возникает при логарифмическом методе индексации объектов QGraphicsItem в сцене. Падает программа при удалении объектов со сцены. Причину не могу объяснить и не нашел нигде объяснений. Но проблема устраняется при изменении метода индексации объектов в сцене setItemIndexMethod(QGraphicsScene.NoIndex)

Более подробно в документации.