qt应用程序与opencv关闭失败(0xC000004B)
qt app with opencv fails at shutdown (0xC000004B)
Simple qt(4.7.3)和opencv(2.3.1)应用程序运行在vs2008调试终止消息:
...
The thread 'Win32 Thread' (0x2418) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x1cc4) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0xd7c) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x2108) has exited with code 0 (0x0).
The thread 'Win32 Thread' (0x17a0) has exited with code -1073741749 (0xc000004b).
The program '[472] QtArrSurf.exe: Native' has exited with code 0 (0x0).
0xC000004B错误码表示STATUS_THREAD_IS_TERMINATING(试图挂起一个已经开始终止的线程)。
程序源代码:
#include <QtGui>
#include <opencv2/features2d/features2d.hpp>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QPushButton b("button");
b.show();
QFileDialog::getOpenFileNames(&b, "Dialog", "", "Files(*.png)"); // problem trigger
cv::SURF detectorSURF; // just to touch opencv
return a.exec();
}
如果注释对话框没有0xc000004b,一切都很顺利,程序中只有一个线程。当dialog执行时,会产生许多线程,这些线程不会以dialog:
结束。0 > 6192 Main Thread Main Thread main Normal 0
0 8928 Worker Thread Win32 Thread 77a01f36 Normal 0
0 4620 Worker Thread Win32 Thread 77a01f36 Normal 0
0 9800 Worker Thread Win32 Thread 77a01f36 Normal 0
0 7924 Worker Thread Win32 Thread 77a0014d Normal 0
0 3844 Worker Thread Win32 Thread 77a01f36 Normal 0
0 2524 RPC Thread RPC Callback Thread 779ffd81 Normal 0
0 3068 Worker Thread Win32 Thread 77a00552 Normal 0
...
这些线程是关于什么的?它们有静默堆栈,像这样:
要! 77 a01f36 ()
[下面的帧可能不正确和/或缺失,没有为ntdll.dll加载符号]要用到! 77 a01f36 ()
要用到! 77 a2471e ()
kernel32.dll ! 7587339 ()
要用到! 77 a19ed2 ()
要用到! 77 a19ea5 ()
感兴趣的地方是CvModule静态对象在opencv dll。OpenCV 2.3.1 src system.cpp核心模块:
CvModule cxcore_module( &cxcore_info );
在失败的情况下,我没有到达它的析构函数,但在良好的情况下(没有对话框)。
0xC000004B的情况是真正的问题吗?
有什么建议在哪里寻找解决方案?
谢谢。
我相信你的应用程序没有失败。
线程的退出代码可以是任何代码,线程的非零返回值并不表示错误,它只是表明线程在退出时返回了该值,无论出于什么原因。
除非您在退出时遇到崩溃或其他问题,否则我认为您可以安全地忽略非零返回值。如果您想完全理解为什么线程返回这个值,您将需要调试QT代码并确定哪个线程正在执行此操作。如果找到了这个线程,可以在它的退出点设置一个断点,看看为什么这个函数中的逻辑决定返回这个值。
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 生成MRPT库时cmake配置失败
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- qt应用程序与opencv关闭失败(0xC000004B)