Qt5Cored!Qobject :: disconnect ...在0x0读取访问冲突

时间:2014-02-05 05:03:04

标签: c++ qt exception memory-management qt-creator

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

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

- 添加QObjectCleanupHandler和QPointer<>到MDI子窗口和工人类。

  • run-DEBUG应用程序。

在跑步结束时:

出现一个对话框,其中显示的是汇编堆栈数据。

在QT Creator菜单中检查调试日志:Windows \ Views \ Debugger Log \

Log Snippet:

移至最底层

::::

段:

移至最底层

  

dState从InferiorRunRequested(10)更改为InferiorRunOk(11)   [master](1d84.1720):访问冲突 - 代码c0000005(第一次机会)   s sException at 0x67343a9c,代码:0xc0000005:读取访问冲突   at:0x0,flags = 0x0(第一次机会)at   C:\工作\编译\ qt5_workdir \ W \ S \ qtbase的\ src \ corelib的\核心\ qobject.cpp:2813   在任何异常处理之前报告第一次机会异常。   可以预期和处理此异常。 eax = 03f160f1 ebx = 00000000   ecx = 03f3b728 edx = feeefeee esi = 00000005 edi = 00000000 eip = 67343a9c   esp = 0046d1b8 ebp = 0046d340 iopl = 0 nv up ei pl nz na po nc   cs = 0023 ss = 002b ds = 002b es = 002b fs = 0053 gs = 002b
  efl = 00010202 Qt5Cored!QObject :: disconnect + 0x2bc:2813 67343a9c 8b02   mov eax,dword ptr [edx] ds:002b:feeefeee = ???????? s sException at   0x67343a9c,代码:0xc0000005:读访问冲突位于:0x0,flags = 0x0   (第一次机会)dNOTE:下方自然停止sStopped。 dState   从InferiorRunOk(11)变为InferiorStopOk(14)[master]   解析符号:Qt5Cored!QObject :: disconnect ...


负责异常的源代码片段:

QThread *thread = new QThread;
QPointer<vcSharedDataQt> worker = new vcSharedDataQt();
trackObject(worker);
worker->movetothread(thread); 

trackObject()方法是QMdiSubWindow

上的私有字段
class <form> 
{

 private:

   QObjectCleanupHandler trackObject(QObject obj);


::: etc.

纠正措施:

源代码段已更改为:

QThread *thread = new QThread;
QPointer<vcSharedDataQt> worker = new vcSharedDataQt();
worker->movetothread(thread); 

/ *    删除了所有类中的所有QObjectCleanupHandler实例。 * /

QT环境定义为例外:QT KernelBase!RaiseException at 0x759fc41f


1 个答案:

答案 0 :(得分:0)

我曾经遇到同样的问题而且它出现了,我不得不重启QtCreator。再次加载我的项目后,我的代码中没有更改任何内容,我再也没有收到该错误。