Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在我的程序中使用QT对象时发生访问冲突 我想将 >整合到现有的桌面C++项目中。要求使用MSVC2013 64位和编译器设置的/MT标志静态构建QT,因此我从源代码构建QT5.5.0_C++_Qt_Dll_Static Libraries_Msvc12 - Fatal编程技术网

在我的程序中使用QT对象时发生访问冲突 我想将 >整合到现有的桌面C++项目中。要求使用MSVC2013 64位和编译器设置的/MT标志静态构建QT,因此我从源代码构建QT5.5.0

在我的程序中使用QT对象时发生访问冲突 我想将 >整合到现有的桌面C++项目中。要求使用MSVC2013 64位和编译器设置的/MT标志静态构建QT,因此我从源代码构建QT5.5.0,c++,qt,dll,static-libraries,msvc12,C++,Qt,Dll,Static Libraries,Msvc12,集成按预期工作,我设法从QtCore.lib测试了一些Qt的对象(QFile,QObject)。应用程序运行起来似乎没有任何问题,没有崩溃。但是,程序存在-1073741819错误级别。我附加了调试器并尝试在Visual Studio中捕获异常,结果如下: First-chance exception at 0x00007FFAC6E4E1A2 in silversim.exe: 0xC0000005: Access violation executing location 0x00007FFA

集成按预期工作,我设法从QtCore.lib测试了一些Qt的对象(QFile,QObject)。应用程序运行起来似乎没有任何问题,没有崩溃。但是,程序存在
-1073741819
错误级别。我附加了调试器并尝试在Visual Studio中捕获异常,结果如下:

First-chance exception at 0x00007FFAC6E4E1A2 in silversim.exe: 0xC0000005: Access violation executing location 0x00007FFAC6E4E1A2.
Unhandled exception at 0x00007FFAC6E4E1A2 in silversim.exe: 0xC0000005: Access violation executing location 0x00007FFAC6E4E1A2.
我撤销代码集成,直到我只有一个简单的
QObject对象函数内的声明。通过这个简单的声明,程序存在时有错误,如果不使用Qt对象,程序正常存在

这里发生了什么?可能是Qt的静态链接?可能是Qt5.5版本中的错误?或者我的程序中的其他东西试图在清理过程中以某种方式处理qt.libs

更新


多亏了IDA反编译器,我终于找到了崩溃发生的地方,但我仍然不知道为什么。它在
void\uu fastcall qt\u watch\u线程(HANDLE hObject,struct QThread*)
中崩溃。正如我所注意到的,Qt创建了一些线程,当程序退出时这些线程不会被破坏,这些线程试图访问无效内存。可能与这个打开的qt错误有关:但在我的例子中,我没有加载任何插件。

你能展示一些代码吗?你为什么要使用这样一个古老的QT版本?有很多代码要显示,但我认为它不相关。因为它是一个老的、经过了充分测试的C++代码。任何函数中任何位置的Qt对象的简单声明都足以生成错误退出代码。(另见更新)盲目猜测:Qt的类应该在QApplication中使用。因此,在执行任何其他操作之前,您可能应该在main()中创建一个Q(Core)应用程序对象。@markus nm很好的提示。我会试着让你知道它是否有效。你能展示一些代码吗?你为什么要使用这样一个古老的QT版本?有很多代码要显示,但我认为它不相关。因为它是一个老的、经过了充分测试的C++代码。任何函数中任何位置的Qt对象的简单声明都足以生成错误退出代码。(另见更新)盲目猜测:Qt的类应该在QApplication中使用。因此,在执行任何其他操作之前,您可能应该在main()中创建一个Q(Core)应用程序对象。@markus nm很好的提示。我会试着让你知道它是否有效