После того, как я невинно переименовал массив, мое ранее работающее решение все еще компилируется и связывается, но получающийся двоичный файл (будь то отладка или выпуск) теперь падает после рисования фрейма для графического интерфейса Qt.
То есть переименование:
Mat map_x[NUM_PROJS];
чтобы:
Mat mapX[NUM_PROJS];
…приводит к аварийному завершению двоичного файла.
Как вы можете догадаться, массив не имеет ничего общего с GUI. По факту, эта декларация является единственным упоминанием этой переменной в решении.
Я компилирую свой код C ++ в Visual Studio 2015, используя надстройку Qt VS и Qt Creator для редактирования пользовательского интерфейса.
Я полагал, что VS не обновляет .moc для соответствующего исходного файла, но я подтвердил, что «Rebuild» делает то, что говорит, посмотрев на метки даты для файлов (см. Ниже).
Следуя предложению @ JeremyFriesner, в отладчике я подтвердил, что массив находится в куче и имеет огромное количество флагов, как показано:
map_x 0x00007ff687d559c0 {{flags=1124007936 dims=0 rows=0 ...}, {flags=1124007936 dims=0 rows=0 ...}, {flags=...}, ...} cv::Mat[9]
Идентичное объявление map_y показывает 0 флагов в куче:
map_y 0x00007ff687d54ba0 {{flags=0 dims=0 rows=0 ...}, {flags=0 dims=0 rows=0 ...}, {flags=0 dims=0 rows=0 ...}, ...} cv::Mat[9]
После ручного запуска QMake для выходного файла .pro из надстройки «Qt VS Tools» VS2015 и перекомпиляции в Qt Creator проблема на мгновение исчезла, а затем снова возникла после очередного цикла очистки / сборки.
Звучит ли это кому-нибудь знакомо?
VS построить вывод следующим образом:
------ Rebuild All started: Project: imageSlice_Qt, Configuration: Debug x64 ------
1> Moc'ing imageSlice_Qt.h...
1> Uic'ing imageSlice_Qt.ui...
1> Moc'ing customSpinBox.h...
1> Rcc'ing imageSlice_Qt.qrc...
1> customSpinBox.cpp
1> moc_customSpinBox.cpp
1> moc_imageSlice_Qt.cpp
1> imageSlice_Qt.cpp
1> main.cpp
1> utilities.cpp
1> Generating Code...
1> qrc_imageSlice_Qt.cpp
Задача ещё не решена.
Других решений пока нет …