Что могло заставить dynamic_cast отказывать?

Ошибка в том, что вы передаете значение BOOLEAN вместо значения Mat в функции imshow() OpenCV здесь:

cv2.imshow('frame',ret)

Таким образом, вы должны передать кадр:

[111 ]

cap.read() в Python возвращает два значения, одно из которых - Boolean, которое показывает, было ли успешно прочитано фрейм, а второе - сам фрейм. Поэтому вы должны проверить ret, если это true, а затем показать кадр.

18
задан Barth 10 November 2008 в 16:48
поделиться

6 ответов

Некоторые возможные причины для катастрофического отказа:

  • obj точки к объекту с неполиморфным типом (класс или структура без виртуальных методов или фундаментальный тип).
  • obj точки к объекту, который был освобожден.
  • obj точки к неотображенной памяти или памяти, которая была отображена таким способом как для генерации исключения при доступе (такие как защитная страница или недоступная страница).
  • obj точки к объекту с полиморфным типом, но тем типом был определен во внешней библиотеке, которая была скомпилирована с отключенным RTTI.

Не все эти проблемы обязательно вызывают катастрофический отказ во всех ситуациях.

37
ответ дан 30 November 2019 в 06:09
поделиться

Я предлагаю использовать другой синтаксис для этого фрагмента кода.

if (MonitorObjectH1C* monitorObject = dynamic_cast<MonitorObjectH1C*>(obj))
{
    axis = monitorObject->GetXaxis();
}

можно все еще отказать, если некоторый другой поток удаляет то, на что указывает monitorObject или если obj является сумасшедшим мусором, но по крайней мере проблема не бросает связанный больше, и Вы не делаете dynamic_cast дважды.

11
ответ дан 30 November 2019 в 06:09
поделиться

Поскольку это отказывает только иногда, я держал пари, что это - проблема поточной обработки. Проверьте все ссылки на 'obj':

grep -R 'obj.*=' .
3
ответ дан 30 November 2019 в 06:09
поделиться

dynamic_cast возвратится 0, если состав исполнителей перестанет работать, и Вы бросаете к указателю, который является Вашим случаем. Проблема состоит в том, что Вы или повредили "кучу" ранее в Вашем коде, или rtti не был включен.

2
ответ дан 30 November 2019 в 06:09
поделиться

Вы уверены, что значение 'obj' было правильно определено?

, Если, например, это является неинициализированным (т.е. случайным) их я видел, что он вызвал катастрофический отказ.

2
ответ дан 30 November 2019 в 06:09
поделиться

Значение obj может быть изменено другим потоком?

1
ответ дан 30 November 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: