总之,我写了一些代码。它在调试和发布模式下运行良好。我添加了代码。我开始收到错误。我注释掉了新代码。我继续得到同样的错误,即使我回到了有效的地方。我发现这个bug只在调试模式下出现 - 它在发布时运行良好。
我得到的错误是:
First-chance exception at 0x748F4598 in Speed3Calib1.exe: Microsoft C++
exception: cv::Exception at memory location 0x005EC350.
If there is a handler for this exception, the program may be safely continued.
我走过去找到了给我带来麻烦的部分(自从我第一次提出这个问题以来,我已经添加了异常处理)。这部分给我带来了麻烦。
try {
calibrateCamera(object_points_vector, test_image_points_vector, test_image.size(), intrinsic,
distortion_coefficients, rvecs, tvecs, calibration_flags);
}
catch (cv::Exception &e) {
std::cerr << "Exception: " << e.what() << std::endl;
return 0;
}
新的奇怪之处在于它永远不会进入catch区块,但仍会引发错误。
自从第一次询问以来,我偶然发现了一个勾选的框#34;当它被抛出时会中断这个错误&#34;。我取消勾选它,现在它运行,但仍然在Debug的输出中出现异常。我无法弄清楚为什么刚刚开始,或者为什么我无法捕捉到cv :: Exception。
我注意到,据微软称,在程序处理它们之前出现了第一次机会异常。
但是,如果正在调试应用程序,则调试器会在程序执行之前查看所有异常。
我仍然感到困惑:因为执行从未进入catch块,这是否意味着第一次机会异常被抛出但是cv :: Exception不是,或者由于某种原因cv :: Exception没有被抓住?
另外,我是Visual Studio的新手,我的C ++已经超过10年了(自2000年以来我一直是Netbeans和Java)。