Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.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
C++ Qt5Cored!Qobject::断开连接。。。0x0处的读取访问冲突_C++_Qt_Exception_Memory Management_Qt Creator - Fatal编程技术网

C++ Qt5Cored!Qobject::断开连接。。。0x0处的读取访问冲突

C++ Qt5Cored!Qobject::断开连接。。。0x0处的读取访问冲突,c++,qt,exception,memory-management,qt-creator,C++,Qt,Exception,Memory Management,Qt Creator,下面描述了问题以及我如何“纠正”它们。此运行时事件需要几个小时才能解决。由于该网站是我最喜欢的信息来源之一,我认为这可能会使某些人受益 我确信这个异常是由我对QObjectCleanupHandler的误解造成的。如对QObjectCleanupHandler的实际实现提出任何建设性意见,将不胜感激 --将QObjectCleanupHandler和QPointer添加到MDI子窗口和工作类 运行调试应用程序 在运行结束时: 将引发一个对话框,其中显示的是程序集堆栈数据 检查了QT Crea

下面描述了问题以及我如何“纠正”它们。此运行时事件需要几个小时才能解决。由于该网站是我最喜欢的信息来源之一,我认为这可能会使某些人受益

我确信这个异常是由我对QObjectCleanupHandler的误解造成的。如对QObjectCleanupHandler的实际实现提出任何建设性意见,将不胜感激

--将QObjectCleanupHandler和QPointer添加到MDI子窗口和工作类

  • 运行调试应用程序
在运行结束时:

将引发一个对话框,其中显示的是程序集堆栈数据

检查了QT Creator菜单中的调试日志:Windows\Views\Debugger log\

日志片段:

下移

:::::

片段:

下移

数据状态从请求的较低运行(10)更改为请求的较低运行(11) [主机](1d84.1720):访问冲突-代码c0000005(第一次机会) 在0x67343a9c处发生s异常,代码:0xc0000005:读取访问冲突 at:0x0,标志=0x0(第一次机会) c:\work\build\qt5\u workdir\w\s\qtbase\src\corelib\kernel\qobject.cpp:2813 在任何异常处理之前报告第一次机会异常。 此异常可能是预期的,并且可以处理。eax=03f160f1 ebx=00000000 ecx=03f3b728 edx=feeefeee esi=00000005 edi=00000000 eip=67343a9c esp=0046d1b8 ebp=0046d340 iopl=0 nv向上ei pl nz na po nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b
efl=00010202 QT5已存储!QObject::断开+0x2bc:2813 67343a9c 8b02 mov eax,dword ptr[edx]ds:002b:feeefeee=????????女性的性感觉 0x67343a9c,代码:0xc0000005:0x0处的读取访问冲突,标志=0x0 (第一次机会)注意:下自发停止。数据状态 从较低的RUNOK(11)更改为较低的STOPOK(14)[主控] 解析符号:Qt5Cored!QObject::断开连接。。。
导致异常的源代码片段:

QThread *thread = new QThread;
QPointer<vcSharedDataQt> worker = new vcSharedDataQt();
trackObject(worker);
worker->movetothread(thread); 
QThread*thread=新的QThread;
QPointer worker=new vcSharedDataQt();
trackObject(worker);
辅助线程->移动到线程(线程);
trackObject()方法是QMBwindow上的私有字段

class <form> 
{

 private:

   QObjectCleanupHandler trackObject(QObject obj);


::: etc.
类
{
私人:
QObjectCleanupHandler跟踪对象(QObjectObj);
::等等。
纠正措施:

源代码片段已更改为:

QThread *thread = new QThread;
QPointer<vcSharedDataQt> worker = new vcSharedDataQt();
worker->movetothread(thread); 
QThread*thread=新的QThread;
QPointer worker=new vcSharedDataQt();
辅助线程->移动到线程(线程);
/* 已删除所有类中QObjectCleanupHandler的所有实例。 */

异常中定义的QT环境:



有一次,我遇到了同样的问题,那就是我必须重新启动QtCreator。在再次加载我的项目后,没有更改代码中的任何内容,我再也没有收到该错误。

如果没有应用程序中的更多上下文和分析正在发生的事情,那么该错误的用处是有限的。对我来说,崩溃的实际原因可能是在
worker
中,从两个未受保护的线程(从其运行的新线程和(主)线程)访问使用清理处理程序执行线程。现在看起来您正在泄漏线程和工作线程,因此我不确定问题是否得到正确解决。我认为您的评估是正确的。我将在指针插入所有活动线程的QList时,并仅在将finalize发送回mai后,调查线程资源的进一步锁定n线程,QThread对象将从QList中删除。当线程添加到指针列表中时,可能需要实现锁定。我将查看它。感谢您的评论。