исключение в режиме выпуска, а не в режиме отладки

Когда я запускаю этот код в режиме отладки, никакие исключения не появляются, но в режиме выпуска я получаю это исключение:

Необработанное исключение в 0x768b4b32 в RealTimeSLT.exe: Microsoft C ++
исключение: cv :: Исключение в ячейке памяти 0x003de734 ..

почему эта проблема появляется только при выпуске? и как я могу это исправить ??

FileStorage fs2(fileName, FileStorage::READ);
fs2.open(fileName, FileStorage::READ);
fs2["Mat"] >> Mat;
fs2["dMat"]>> dMat;
fs2.release();

0

Решение

Предполагая, что вы работаете в VS, выберите «Отладка-> Исключения» и нажмите «Разбить, когда выбрасывается исключение»

Запустите приложение в отладчике и посмотрите, почему выбрасывается это исключение и на что оно жалуется — скорее всего, это нечто иное в среде, в которой работает приложение.

Если вам нужно изучить переменные, то сборка релиза усложняет задачу, так как оптимизатор может сбить с толку отладчик. Вероятно, вы можете решить эту проблему, отключив оптимизацию в вашей сборке релиза. Однако, если это проблема времени, это может скрыть проблему.

Другой вариант — перехватывать генерируемое исключение и затем записывать его внутреннее сообщение — обычно это функция с именем what () или аналогичная. Это очень вероятно укажет вам на актуальную проблему. Вполне вероятно, что вы все равно захотите поймать это исключение.

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

1

Другие решения

Код выглядит странно.

Не зная больше о вашем объекте FileStorage, я вижу, что вы создали один в стеке на первой линии.

Предполагая, что release () — это какой-то метод подсчета ссылок, fs2.release () попытается удалить его, поскольку счетчик ссылок будет равен нулю.

Не хорошо удалять объекты, которые были размещены в стеке. Вы получите крах.

Либо (1), попробуйте вместо этого (то есть выделить в куче)

FileStorage fs2 = new FileStorage(fileName, FileStorage::READ);

(Предполагая, что объект имеет встроенную семантику подсчета ссылок; проверьте документы).

Или 2:
удалите последнюю строку, так как fs2 выйдет из области видимости, поскольку стек раскручивается.

0

Вам нужно снова добавить файлы «* .lib» в компоновщик проекта, когда U r в режиме релиза.
Я думаю, что это ошибка для opencv после 2.4.1.

0

В моем случае это было потому, что библиотеки OpenCV были созданы с VS2010, а я использовал VS2015.

Чтобы решить проблему, я изменил свой Project Properties> General> Platform Toolset, чтобы он соответствовал набору инструментов, используемому для создания библиотек opencv, с которыми я связывался.

0
По вопросам рекламы [email protected]