简单的OpenCV命令可以在调试模式下工作,但不能在发布模式下工作
Simple OpenCV command works in Debug mode but not Release mode
我正试图用CascadeClassifier::load()
加载到一个训练xml文件中,它在调试模式下工作得很好,但在发布模式下我遇到了运行时错误。
我得到的错误是:
Testing.exe中0x000007feefbf4938处未处理的异常:0xC0000005:写入位置0x0000000000000027时发生访问冲突。
我的代码如下:
CascadeClassifier c;
if (!c.load("C:/data/haarcascade_frontalface_alt.xml"))
{
exit(1);
}
代码在加载线上崩溃。为什么会发生这种情况?
确保在发布模式下运行时链接到openCV的发布dll。当我尝试使用混合发布和调试dll加载文件时,我也遇到过类似的问题。
请参阅此帖子。
没有猜测为什么load
行只会在发布版本中导致访问冲突。因此,下一步是通过日志记录、printfs或任何对您有用的东西来检测您的OpenCV版本二进制文件。这种类型的调试在这种情况下有效,因为您有OpenCV的源代码,并且能够使用VS2010重新编译。
我认为您的错误在于XML文件的"加载"和项目设置中的"工作目录"设置。
如果转到项目的"属性"窗口,请确保"调试"选项中的"工作目录"是正确的。更改"配置"(在"调试"answers"发布"之间),您应该能够进行比较。
当您试图读取不存在的文件时,有时会出现此错误。使用"错误"工作目录中的本地路径通常是在一种配置而非另一种配置中工作的罪魁祸首。
编辑:
该文件存在吗?它是正确的XML吗?
这很奇怪。检查调试和发布版本的选项,确保使用的是正确版本的库。
我试着在我的一个项目上运行代码,在调试和发布版本中都很好,使用opencv 2.3.1
试着将这些代码行添加到另一个项目中,发布版本正在运行,并且您已经使用了opencv。如果它有效,那么问题出在配置设置上。
- 自定义内存管理器在发布模式下工作正常,但在调试模式下则不然
- 装饰器模式在 c++ 中的工作原理
- 我的代码在发布模式下不起作用,而在Qt的调试模式下工作
- 模式匹配函数的时间测量无法正常工作
- ifstream读取二进制文件在发行模式下工作,但在调试模式下不使用
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 为什么在发布模式下无法访问 for 循环,但在调试中它工作正常
- Python在调试模式下以C 工作,但在EXE文件中不工作
- 该代码在调试模式下工作,但在发布模式C 中不起作用
- 当主GUI线程被阻塞时,如何从工作线程创建无模式对话框
- 如何在 QT 框架工作C++中使用变量作为正则表达式模式
- 在发行模式下开放的软崩溃(调试工作正常)
- 在 C++11 中,lambda 队列是否是工作队列的良好设计模式
- 工作线程队列的这种变体是某种模式或通用结构吗?
- 混合模式程序集(C++/CLI项目)在.NET Core上工作吗
- 在QIODevice::Append模式下打开的QFile意外工作.这是一个Qt错误吗
- 模式功能:它是如何工作的
- zmq呼吸机/工作人员/水槽模式与子流程一起不工作
- 在调试器模式下工作,但在最终版本中不起作用.为什么
- ZeroMq PUB/SUB 模式无法正常工作