在我无意中重命名了一个数组之后,我以前工作的解决方案仍在编译和链接,但是在绘制Qt GUI的帧之后,生成的二进制文件(无论是调试还是发布)现在崩溃了。
即重命名:
Mat map_x[NUM_PROJS];
为:
Mat mapX[NUM_PROJS];
...导致生成的二进制文件崩溃。
正如您可能猜到的,该阵列与GUI无关。实际上,此声明是解决方案中唯一提及此变量的内容。
我正在使用Qt VS Add-In和Qt Creator在Visual Studio 2015中编译我的C ++代码来编辑用户界面。
我认为VS没有更新相关源文件的.moc,但我确认“重建”正在查看文件的日期戳(见下文)。
按照@ 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]
在VS2015'Qt VS Tools'Add In的.pro文件输出上手动运行QMake,并在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